public class A {
public A() {
System.out.println("a1");
}
public A(int x) {
System.out.println("a2");
}}
public class B extends A {
public B() {
super(5);
System.out.println("b1");
}
public B(int x) {
this();
System.out.println("b2");
}
public B(int x, int y) {
super(x);
System.out.println("b3");
}}
我不明白为什么当我运行 B b= new B(); 时不应用 A 的默认结构;
B 扩展了 A,所以首先我们调用 A 的构造来打印“a1”,然后我们调用 A 的第二个构造来打印“a2”,然后 B()
打印“b1”,但是当我运行它时,它只打印“a2,b1”,所以显然 A()
不会在开始时应用 - 为什么?
最佳答案
当你说B b = new B();
时,你正在调用默认构造函数
public B() {
super(5);
System.out.println("b1");
}
由于这已经调用了其 super 构造函数 [super(5)
],因此编译器不会插入隐式默认构造函数。这就是结果。
注意:从您的问题来看,您似乎认为创建对象时会调用所有构造函数。恐怕这是不正确的。只有您显式调用来创建对象的构造函数才会被调用。如果该构造函数通过 this()
方法调用其他构造函数,那么其他构造函数才会被调用。
关于java - java中的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7293356/