Sha*_*had 4 java constructor constructor-chaining
据我所知,Constructctor Chaining就是这样
每当我们创建子类的对象(或调用子类构造函数)时,只有在
我们的子构造函数没有使用此(对于相同的类)或超级关键字调用另一个构造函数时,才会首先自动调用父类的默认构造函数..来源:http://www.java67.com/2012/12/how-constructor-chaining-works-in-java.html
如果我的理解是正确的
然后为以下代码: -
Class First{
First(){
System.out.print("Hello");
}
Class Second extends First{
Second(int i)
{
System.out.println("Blogger");
}
Second(){
this(2); //default constructor is calling another constructor using this keyword
}
public static void main(String[] args)
{
Second ob = new Second();
}
Run Code Online (Sandbox Code Playgroud)
输出应该Blogger只是.
但输出是 HelloBlogger
所以看起来父类的默认构造函数仍然被调用.但引用该来源: -
2)如果你没有从父类或同一个类调用另一个构造函数,而不是Java调用default或没有超类的参数构造函数.
阅读更多:http://www.java67.com/2012/12/how-constructor-chaining-works-in-java.html#ixzz4qztuMrKW
所以请帮忙!
基本规则是始终调用超类构造函数的方式.这条规则没有技巧*并且有充分理由:子类依赖于超类的状态,因此如果超类未初始化,则子类行为不正确.(protected例如,想想继承的字段.)
如果你添加一个显式调用super(...)(你可以选择在这里调用哪个超级构造函数),那么将调用它,否则super()(没有参数)将从任何不调用另一个的构造函数中隐式调用this(...).
在你的情况下,链如下:Second() -> Second(int) -> First().第一个调用是explicit(this(2)),第二个调用是隐式的.
*对于nitpickers,如果您使用反序列化或者使用反序列化,则此声明显然不正确Unsafe.:)
| 归档时间: |
|
| 查看次数: |
312 次 |
| 最近记录: |