本帖最后由 longlangcx 于 2013-8-11 16:58 编辑
首先说下“接口解决了部分问题”的意义。
何为部分呢?
接口是通过多实现的方式来达到多重继承的效果的。即让一个类可以在extends一个ClassA的同时还能implements InterfaceB,InterfaceC。即只能继承一个类,实现多个接口。
但是想要做到类似extends ClassA. ClassB, ClassC的效果怎么办呢?没办法,用接口做不到。这就是接口的局限性。也就是所谓的接口只解决了部分问题。
而内部类有效地实现了多重继承
上面接口没有解决的问题,用内部类是怎么解决的呢?是用这种方式解决的:- class A{}
- abstract class B{}
- abstract class C{}
- class D extends A{
- B getB(){
- return new B(){};
- }
- C getC(){
- return new C(){};
- }
- }
复制代码 D类继承了A类的同时,还使用内部类继承了B抽象类和C抽象类。
这和直接使用普通类来继承B类C类,然后通过组合的方式放入D类中有什么区别呢?
区别在于:
内部类与外围类具有特殊关系,二者可以进行直接互访。
与此同时,内部类对外是不可见的。
|