黑马程序员技术交流社区

标题: 【基础】内部类是如何让java实现多继承的 [打印本页]

作者: 龚首道    时间: 2013-8-11 13:32
标题: 【基础】内部类是如何让java实现多继承的
本帖最后由 龚首道 于 2013-8-14 16:41 编辑

如题。
内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了多重继承,那么内部类是如何实现多继承的呢?

作者: longlangcx    时间: 2013-8-11 16:39
本帖最后由 longlangcx 于 2013-8-11 16:58 编辑

首先说下“接口解决了部分问题”的意义。

何为部分呢?
接口是通过多实现的方式来达到多重继承的效果的。即让一个类可以在extends一个ClassA的同时还能implements InterfaceB,InterfaceC。即只能继承一个类,实现多个接口。
但是想要做到类似extends ClassA. ClassB, ClassC的效果怎么办呢?没办法,用接口做不到。这就是接口的局限性。也就是所谓的接口只解决了部分问题。

而内部类有效地实现了多重继承
上面接口没有解决的问题,用内部类是怎么解决的呢?是用这种方式解决的:
  1. class A{}
  2. abstract class B{}
  3. abstract class C{}
  4. class D extends A{
  5.         B getB(){
  6.                 return new B(){};
  7.         }
  8.         C getC(){
  9.                 return new C(){};
  10.         }
  11. }
复制代码
D类继承了A类的同时,还使用内部类继承了B抽象类和C抽象类。

这和直接使用普通类来继承B类C类,然后通过组合的方式放入D类中有什么区别呢?
区别在于:
内部类与外围类具有特殊关系,二者可以进行直接互访。
与此同时,内部类对外是不可见的。

作者: 龚首道    时间: 2013-8-11 16:43
longlangcx 发表于 2013-8-11 16:39
首先说下“接口解决了部分问题”的意义。

何为部分呢?

恩恩,“接口解决了部分问题”解释的很好,我理解了。。。请继续
作者: 以防万一    时间: 2013-8-13 22:18
亲,如问题已解决请将分类的未解决改为已解决。

以后的问题贴也要及时更改分类哦~


保持队形,谢谢合作




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2