让我们说我有以下代码:
class A {
Greating g = new Greating();
public A(){system.out.print("Creating class A");}
}
class B extends A{
public B(){system.out.print("Creating class B");}
}
class Greating{
public Greating(){system.out.print("Hi");}
}
我尝试执行
时的输出是什么public static void main(String[] args) {
new B();
}
我认为它首先会调用B的构造函数,B的构造函数会调用A的构造函数,但我不知道创建A"或者"嗨"消息将首先显示。在类上调用的第一件事应该是它的构造函数,但是当我执行程序时,我注意到了#34;嗨"在"创建A"之后显示。为什么呢?
答案 0 :(得分:1)
输出将类似于吼叫:
Hi
Creating class A
Creating class B
因为首先构造函数 Greating()将被调用来初始化A的属性g然后执行构造函数 A()然后执行构造函数 B()< / strong>
答案 1 :(得分:0)
子类总是在构造函数的最开始调用它的超类的构造函数。因为A的构造函数没有任何参数,所以你不需要显式调用它,但编译器基本上在B的构造函数的最开头添加了super()。