[code="java"]
public class Parent {
private int eatId=0;
public Parent() {
System.out.println("parent is creating");
eat();
}
public void eat() {
System.out.println("==parent is eating "+eatId);
}
public static void main(String[] args) {
Parent p=new Son();
}
}
class Son extends Parent {
private int eatId=1;
public Son() {
System.out.println("son is creating");
eat();
}
public void eat() {
System.out.println("==son is eating "+eatId);
}
}
[/code]
如上代码,输出结果:
parent is creating //1
==son is eating 0 //2
son is creating //3
==son is eating 1 //4
疑惑的是,
1)输出中2 3行,为什么son在构造之前(按我的理解就是还没有生成)就可以调用它的eat方法了,如果可以调用这个时候的eatId是谁的,为什么?从结果看来是parent的 可是在parent中eatId是似有的啊?
2)eatId作为私有变量,parent中和son中有没有关系,他们存不存在重载的情况?
自己有点乱,请高人解释一下啊
[b]问题补充:[/b]
但是son 在还没有具体创建成功的时候 怎么能够调用他的方法呢?
RednaxelaFX 说的对,那个0不是表示parent 时表示jvm默认的初始赋值