从Java执行过程开始
由于在eclipse中编写Java代码很容易忽视Java的运行流程,eclipse会自动编译源文件,屏蔽掉了生成字节码的过程,所以很容易忽视对于类的加载和运行的过程。
当在父类的构造方法中调用了子类的方法时,子类中成员变量初始化出错,代码如下:
class Print{
Print(String s){
System.out.println("Step "+s);
}
Print(String s,double i){
System.out.println("Step "+s+" 随机数 "+i);
}
}
abstract class Glyph {
abstract void draw();
Print p2 = new Print("父类成员变量");
static Print p3= new Print("父类静态成员变量");
static Print p6= new Print("父类静态成员变量",Math.random());
Glyph() {
System.out.println("父类构造方法");
System.out.println("Glyph() before draw()");
draw();
System.out.println("Glyph() after draw()");
}
}
class RoundGlyph extends Glyph {
int radius = 1;
String s = "abcdefg";
static Print p4= new Print("子类静态成员变量");
static Print p5= new Print("子类静态成员变量",Math.random());
Print p1 = new Print("子类成员变量");
RoundGlyph(int r) {
System.out.println("子类构造方法");
radius = r;
System.out.println(
"RoundGlyph.RoundGlyph(), radius = "
+ radius);
}
void draw() {
System.out.println("子类draw方法, radius = " + radius+" 字符串 "+s);
}
}
public class PolyConstructors {
public static void main(String[] args) {
new RoundGlyph(5);
}
}
运行结果如下:
Step 父类静态成员变量
Step 父类静态成员变量 随机数 0.8817076586261154
Step 子类静态成员变量
Step 子类静态成员变量 随机数 0.937529828526132