java重载:java内部类的重载问题来源: 发布时间:星期四, 2009年2月12日 浏览:105次 评论:0
如果你创建了个内部类然后继承其外围类并重新定义此内部类时会发生什么呢?也就是说内部类可以被重载吗?这看起来似乎是个很有用点子但是“重载”内部类就好像它是外围类个思路方法其实并不起什么作用: Egg{ privateYolky; protectedYolk{ publicYolk{ .out.prln(\"Egg.Yolk\"); } } publicEgg{ .out.prln(\"NewEgg\"); y=Yolk; } } publicBigEggextendsEgg{ publicYolk{ publicYolk{ .out.prln(\"BigEgg.Yolk\"); } } publicvoid(Stringargs){ BigEgg; } } 输出结果为: NewEgg Egg.Yolk 缺省构造器是编译器自动生成这里是基类缺省构造器你可能认为既然创建了BigEgg对象那么所使用应该是被“重载”过Yolk但你可以从输出中看到实际情况并不是这样 这个例子介绍说明当你继承了某个外围类时候内部类并没有发生什么特别神奇变化这两个内部类是完全独立两个实体各自在自己命名空间内当然明确地继承某个内部类也是可以: Egg2{ protectedYolk{ publicYolk{ .out.prln(\"Egg2.Yolk\"); [Page] } publicvoidf{ .out.prln(\"Egg2.Yolk.f\"); } } privateYolky=Yolk; publicEgg2{ .out.prln(\"NewEgg2\"); } publicvoidinsertYolk(Yolkyy){ y=yy; } publicvoidg{ y.f; } } publicBigEgg2extendsEgg2{ publicYolkextendsEgg2.Yolk{ publicYolk{ .out.prln(\"BigEgg2.Yolk\"); } publicvoidf{ .out.prln(\"BigEgg2.Yolk.f\"); } } publicBigEgg2{ insertYolk(Yolk); } [Page] publicvoid(Stringargs){ Egg2e2=BigEgg2; e2.g; } } 输出结果为: Egg2.Yolk NewEgg2 Egg2.Yolk BigEgg2.Yolk BigEgg2.Yolk.f 现在BigEgg2.Yolk通过extendsEgg2.Yolk明确地继承了此内部类并且重载了其中思路方法Egg2insertYolk思路方法使得BigEgg2将它自己Yolk对象向上转型然后传递给引用y所以当gy.f时重载后新版f被执行第 2次Egg2.Yolk是BigEgg2.Yolk构造器了其基类构造器可以看到在g时候新版f被了 0
相关文章读者评论发表评论 |
|