每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响
内部类有效的实现了多重继承,也就是说,内部类允许继承多个非接口类型(类或抽象类)
如果拥有抽象类或具体的类,而不是接口,那就只能使用内部类才能够实现多重继承
package object; //: innerclasses/MultiImplementation.java // With concrete or abstract classes, inner // classes are the only way to produce the effect // of "multiple implementation inheritance." class D {} abstract class E {} class Z extends D { E makeE() { return new E() {}; } } public class MultiImplementation { static void takesD(D d) {} static void takesE(E e) {} public static void main(String[] args) { Z z = new Z(); takesD(z); takesE(z.makeE()); } } ///:~
如果不需要解决多重继承的问题,那么自然可以用别的代码,而不需要使用内部了,但如果使用内部类,还可以获得一些其它特性
1)内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息,相互独立
2)在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或继承同一个类
3)创建内部类对象的时刻并不依赖于外围类对象的创建
4)内部类并没有令人迷惑的"is-a"关系,它就是一个独立的实体