当前位置: 技术问答>java相关
java中继承的问题大家帮我看看
来源: 互联网 发布时间:2015-04-16
本文导语: class Egg2 { protected class Yolk { public Yolk() { System.out.println("Egg2.Yolk()"); } public void f() { System.out.println("Egg2.Yolk.f()"); } } private Yolk y=new Yolk(); ; public Egg2() { ...
class Egg2 {
protected class Yolk {
public Yolk() {
System.out.println("Egg2.Yolk()");
}
public void f() {
System.out.println("Egg2.Yolk.f()");
}
}
private Yolk y=new Yolk(); ;
public Egg2() {
System.out.println("New Egg2()");
}
public void insertYolk(Yolk yy) { y = yy; }
public void g() { y.f(); }
}
public class BigEgg2 extends Egg2 {
public class Yolk extends Egg2.Yolk {
public Yolk() {
System.out.println("BigEgg2.Yolk()");
}
public void f() {
System.out.println("BigEgg2.Yolk.f()");
}
}
public BigEgg2() { insertYolk(new Yolk()); }
public static void main(String[] args) {
Egg2 e2 = new BigEgg2();
e2.g();}
}
}
为什么在class BigEgg2中可以用insertYolk(Yolk yy) { y = yy; }
在class BigEgg2中y可没定义,也不能从class Egg2继承呀,
Yolk y 是private型的
protected class Yolk {
public Yolk() {
System.out.println("Egg2.Yolk()");
}
public void f() {
System.out.println("Egg2.Yolk.f()");
}
}
private Yolk y=new Yolk(); ;
public Egg2() {
System.out.println("New Egg2()");
}
public void insertYolk(Yolk yy) { y = yy; }
public void g() { y.f(); }
}
public class BigEgg2 extends Egg2 {
public class Yolk extends Egg2.Yolk {
public Yolk() {
System.out.println("BigEgg2.Yolk()");
}
public void f() {
System.out.println("BigEgg2.Yolk.f()");
}
}
public BigEgg2() { insertYolk(new Yolk()); }
public static void main(String[] args) {
Egg2 e2 = new BigEgg2();
e2.g();}
}
}
为什么在class BigEgg2中可以用insertYolk(Yolk yy) { y = yy; }
在class BigEgg2中y可没定义,也不能从class Egg2继承呀,
Yolk y 是private型的
|
两个对象不同,或者说创建的实例不同。
|
class BigEgg2只是用了方法insertYolk,至于它去怎样实现的完全是由父类
Egg2来实现的,BigEgg2并不需要理会里面用到了那些变量
Egg2来实现的,BigEgg2并不需要理会里面用到了那些变量
|
BigEgg2 extends Egg2,自然的BigEgg2拥有了insertYolk()方法,而且你并没有覆盖,也没有重载Egg2的insertYolk()方法,当你调用BigEgg2时,你当然就调用了其parent定义的insertYolk()方法了,这有什么奇怪的么?你看看经典的书,看书的时候仔细点,不然会害死你的。