java 使用内部类的理由

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

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

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

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

 

posted @ 2019-01-07 20:48  江期玉  阅读(313)  评论(0编辑  收藏  举报