关于继承内部类——java编程思想示例程序分析;
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();
}
}
程序运行结果:
egg2.yolk()
new egg2()
egg2.yolk()
bigegg2.yolk()
bigegg2.yolk.f()
运行顺序:
1、egg2 e2 = new bigegg2();子类在实例化之前,先调用父类构造方法,父类构造方法先初始化类成员;
有 private yolk y = new yolk();,y作为egg2类的成员先被初始化;先调用egg2内部类yolk的构造函数;打印出egg2.yolk();
2、调用egg2的构造函数;打印出egg2.yolk();
3、调用bigegg2的构造函数;因为它insertyolk(new yolk());这里的new yolk是bigegg2的内部类的实例;这个内部类继承了egg2中的内部类
;所以先调用了egg2中yolk的构造函数;打印出egg2.yolk();
4、调用bigegg2.yolk的构造函数;打印出bigegg2.yolk();
5、e2.g();打印出bigegg2.yolk();
我不知道分析的对不对,如果不对,请指教zhaoqb@neusoft.com
或者
zqb@hanhuasoft.com
