如果直接在外部类引用接口能满足需求时,那么就应该这样做。两者区别在于:后者不是总能享用
到接口带来的方便。
内部类最吸引人的地方在于:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了
某个(接口的)实现,对于内部类都没有影响。
内部类使得多重继承的解决方案更加完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。也就是说,
内部类允许继承多个非接口类型(类或抽象类)。
一个实现多重继承类的例子代码如下:- // 举个例子:
- // 有两个这样类D和E
- class D {
- }
- abstract class E {
- }
- // 我要建一个类Z实现多重继承类D和类E
- // 只有采用内部类的方式:
- // 如:
- class Z extends D {
- E makeE() {
- return new E() {
- };
- }
- }
- // 调用内部类
- public class Test {
- 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”关系;它就是一个独立的尸体。
以上解释参考于Bruce Eckel著的《java编程思想》(thinking in java)的说法。
希望这些对你有所帮助。{:soso_e104:} |