abstract public class A {
public A(){
draw();
}
abstract void draw();
}
public class B extends A{
public int radius=1;
public B(int r){
this.radius=r;
}
@Override
void draw() {
System.out.println("B draw(),radius="+radius);
}
public static void main(String args[]){
new B(5);
}
}
输出结果居然是:B draw(),radius=0
稍微修改下:
abstract public class A {
public int radius=1;
public A(){
draw();
}
abstract void draw();
}
public class B extends A{
public B(int r){
this.radius=r;
}
@Override
void draw() {
System.out.println("B draw(),radius="+radius);
}
public static void main(String args[]){
new B(5);
}
}
输出结果居然是:B draw(),radius=1
再次修改:
abstract public class A {
public A(){
//draw();
}
abstract void draw();
}
public class B extends A{
public int radius=1;
public B(int r){
this.radius=r;
}
@Override
void draw() {
System.out.println("B draw(),radius="+radius);
}
public static void main(String args[]){
new B(5).draw();
}
}
输出结果:B draw(),radius=5
这才是我们想要的结果。
为什么会这样,原来只是初始化的顺序问题。