今天看到一个关于子类构造方法的问题代码如下:
public class Test extends BB {
public static void main(String[] args) {
Test a = new Test(5);
}
private int radius = 1;
public void draw() {
System.out.println("A.draw(),radius =" + radius);
}
public Test(int radius) {
this.radius = radius;
System.out.println("A constructor");
}
}
class BB {
private int radius = 10;
public void draw() {
System.out.println("B.draw(),radius =" + radius);
}
public BB() {
System.out.println("B constructor");
draw();
}
}执行结果:
B constructor
A.draw(),radius =0
A constructor我知道生成子类对象是先调用父类无参构造方法,但是为什么父类构造方法却调用了子类的darw()方法!
有没有人可以解释下,谢谢!
public class Test extends BB {
public static void main(String[] args) {
Test a = new Test(5);
}
private int radius = 1;
public void draw() {
System.out.println("A.draw(),radius =" + radius);
}
public Test(int radius) {
this.radius = radius;
System.out.println("A constructor");
}
}
class BB {
private int radius = 10;
public void draw() {
System.out.println("B.draw(),radius =" + radius);
}
public BB() {
System.out.println("B constructor");
draw();
}
}执行结果:
B constructor
A.draw(),radius =0
A constructor我知道生成子类对象是先调用父类无参构造方法,但是为什么父类构造方法却调用了子类的darw()方法!
有没有人可以解释下,谢谢!
B constructor //调用父类的构造方法
A.draw(),radius =0 //调用被子类重写的draw方法,子类的属性还没有被赋值,所以radius是0
A constructor //调用子类的构造方法