码:
Parent Class:
public class Parent {
int i = 10;
{
System.out.println(i);
}
public Parent(){
System.out.println("Parent");
}
}
Child Class:
public class Child extends Parent {
int j = 20;
{
System.out.println(j);
}
public Child() {
super();
}
}
Test Class:
public class ConstructorTest {
public static void main(String... args){
Child c = new Child();
}
}
Run Code Online (Sandbox Code Playgroud)
执行流程(我所知道):
ParentClass中从上到下识别实例成员. ChildClass中从上到下识别实例成员. ParentClass中从上到下执行实例变量赋值和实例块. Parent构造函数. Child类中从上到下执行实例变量赋值和实例块. Child构造函数. 输出:
10
Parent
20
Run Code Online (Sandbox Code Playgroud)
我的问题是:在步骤6中 - 在执行Child构造函数期间,为什么不使用super()child 再次调用父构造函数?
那么为什么输出不是:
10
Parent
20
Parent
Run Code Online (Sandbox Code Playgroud)
该super()线基本上已在步骤4中生效.只是super();隐含的,通常会被删除.通常,您使用显式构造函数链接:
尽管它的位置是子构造函数体的第一行,但在实例初始化器之前执行this()/ super()语句.您应该将其视为与构造函数的其余部分有些分离.
| 归档时间: |
|
| 查看次数: |
196 次 |
| 最近记录: |