每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响

内部类有效的实现了多重继承,也就是说,内部类允许继承多个非接口类型(类或抽象类)

如果拥有抽象类或具体的类,而不是接口,那就只能使用内部类才能够实现多重继承

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"关系,它就是一个独立的实体

05-16 12:27