use*_*042 0 java constructor default-constructor
我知道在创建类的对象时,构造函数会构建该对象.说我有这两个类:
class Vehicle {
public int a = func();
public int func() {
System.out.println("9");
return 9;
}
}
class Car extends Vehicle {
public static void main(String[] args) {
Car c = new Car();
}
}
Run Code Online (Sandbox Code Playgroud)
该项目的输出为"9".但为什么会这样呢?调用Car构造函数时到底发生了什么?我知道有一些类型的默认构造函数,但我不确定它是如何工作的.
有谁可以用上面的例子解释我的对象构造?
编译器提供一个默认的构造函数为Car这是有效的:
Car() {
super();
}
Run Code Online (Sandbox Code Playgroud)
同样Vehicle作为默认构造函数:
Vehicle() {
super();
}
Run Code Online (Sandbox Code Playgroud)
在调用超类构造函数之后,字段被初始化为初始化的一部分.所以就好像这个Vehicle类实际上是这样编写的:
class Vehicle {
public int a;
Vehicle() {
super();
a = func();
}
public int func() {
System.out.println("9");
return 9;
}
}
Run Code Online (Sandbox Code Playgroud)
现在这有意义吗?
有关更详细的说明,请参阅Java语言规范的第15.9.4节.