Java 中子 类 中构造函数的行为
Behavior of costructors in sub classes in Java
假设我有以下代码:
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 的构造函数,但我不知道会显示 "creating A" 或 "Hi" 消息中的哪一个第一的。在 class 上调用的第一件事应该是它的构造函数,但是当我执行程序时,我注意到 "Hi" 在 "Creating A" 之后显示。为什么?
子类总是在构造函数的最开始调用它超类的构造函数。因为A的构造函数没有任何参数,你不需要显式调用它,但编译器基本上会在B的构造函数的最开头添加super()。
输出将如下所示:
Hi
Creating class A
Creating class B
因为首先会调用构造函数Greating()初始化属性 g的A然后执行构造函数A() 然后执行构造函数 B()
假设我有以下代码:
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 的构造函数,但我不知道会显示 "creating A" 或 "Hi" 消息中的哪一个第一的。在 class 上调用的第一件事应该是它的构造函数,但是当我执行程序时,我注意到 "Hi" 在 "Creating A" 之后显示。为什么?
子类总是在构造函数的最开始调用它超类的构造函数。因为A的构造函数没有任何参数,你不需要显式调用它,但编译器基本上会在B的构造函数的最开头添加super()。
输出将如下所示:
Hi
Creating class A
Creating class B
因为首先会调用构造函数Greating()初始化属性 g的A然后执行构造函数A() 然后执行构造函数 B()