java - 默认构造函数链
问题描述
(真或假)如果您编写的构造函数的第一条语句不是对另一个构造函数的调用,则插入一个默认构造函数调用。
这个问题的答案是正确的。然后我尝试并创建了一些链式构造函数。
public class Temp {
// default constructor 1
Temp()
{
System.out.println("default");
}
// parameterized constructor 2
Temp(int x)
{
System.out.println(x);
}
public static void main(String args[])
{
new Temp(8);
}
}
输出:
8
“默认”未打印。所以我认为没有调用默认构造函数。答案应该是错误的。有人可以解释为什么吗?
解决方案
来自Java SE 8 规范:
如果构造函数体不是以显式构造函数调用开始,并且被声明的构造函数不是原始类 Object 的一部分,则构造函数体隐式以超类构造函数调用“super();”开始,调用它的直接超类不带参数。
所以a default constructor call in inserted.
,但它是你的超类的默认构造函数(在这种情况下Object
:)而不是你被声明的类。
推荐阅读
- python-3.x - pyqt5 的 pyinstaller 错误。无法运行分发文件。加载两组 Qt 二进制文件?
- php - 如何测试生成的 php 文件?
- ssis - 是否可以从 SSIS 中的数据流窗格发送邮件
- javascript - 如何修复 cy.route() 数据类型响应问题?
- javascript - 如何循环通过 Socket.onmessage() - javascript
- c# - 如何在三元运算符中使用 void 函数(不同的参数)调用或在 1 行中编写 if-else
- django - 显示 Django 模板中的对象总数
- sql - 如何使用 SQL Query 对表记录进行排序,父项后跟子项
- wordpress - 以 HTML CSS 设计的网站上的 Wordpress 插件
- python-3.x - Pandas:多列转置和求和