| |
关于继承内部类——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
|
|