大家看看这个程序把!(弄懂接结分)
class A {
A() {
System.out.println("A.A called");
}
A(int i) {
this();//这里不是调用上面的构造方法吗?是不是要执行上面的代码一次呢?
System.out.println("A.A(int) called");
}
}
class B extends A {
int i = f();
int j;
{
j = 37;
System.out.println("initialization block executed");
}
B() {
this(10);
System.out.println("B.B() called");
}
B(int i) {
super(i);//这应该是调用上面的第二个构造方法,那该方法是不是也要执行一次呢?
System.out.println("B.B(int) called");
}
int f() {
System.out.println("B.f called");
return 47;
}
}
public class CtorDemo3 {
public static void main(String args[]) {
B bobj = new B();//它初使化b的时候要调用父类的构造方法,但父类有两个构造方法,先调用哪个?为什么两个都调,为什么?
}
}
程序的输出是:
A.A called
A.A(int) called
B.f called
initialization block executed
B.B(int) called
B.B() called