本帖最后由 万宝东 于 2012-7-5 07:59 编辑
class B{
private int radius = 10;
public void draw(){
System.out.println("B.draw(),radius = "+radius);
}
public B(){
System.out.println("B constructor");
draw();
}
}
public class A extends B{
private int radius = 1;
public void draw(){
System.out.println("A.draw(),radius = "+radius);
}
public A(int radius){
this.radius = radius;
System.out.println("A constructor");
}
public static void main(String[] args){
A a = new A(5);
}
}
运行结果是
B constructor
A.draw(), radius = 0
A constructor
对于这个程序的运行顺序我觉得 :运行A a = new A(5);时,程序开始执行
public A(int radius){
this.radius = radius;
System.out.println("A constructor");
}
这个方法体,此时会调用父类的构造方法
打印B constructor,然后运行父类的draw()方法,由于子类重写了draw()方法,会执行System.out.println("A.draw(),radius = "+radius);这一句,但是打印结果却是A.draw(), radius = 0。我实在是想不明白。
为什么radius的值不是 1 或者5 或者10 呢?
|