为什么需要内部类
一般来说,内部类继承自某个类或实现某个接口,内部类的代码操作创建它的外围类的对象。所以可以认为内部类提供了某种进入其外围类的窗口。
内部类必须要回答的一个问题是:如果只是需要一个对接口的引用,为什么不通过外围类实现那个接口呢?答案是:“如果这样能满足需求,那么就应该这样做。” 那么内部类实现一个接口与外围类实现这个接口有什么区别呢?
答案是:后者不是在那个能享用到接口带来的方便,有时需要用到接口的实现。所以,使用内部类最吸引人的原因是:
每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类没有影响。
如果没有内部类提供的、可继承多个具体的或抽象的类的能力,一些设计与编程问题就很难解决。从这个角度看,内部类使得多重继承的解决方案变得完整。接口解决了部分问题,而内部类有效地实现了“多重继承”。也就是说,
内部类允许继承多个非接口类型(类或抽象类)。
情景1:必须在一个类中以某种方式实现两个接口。由于接口的灵活性,可以有2种方式实现:使用单一类,或者使用内部类
1 package tools; 2 3 import tools.InnerClass.A; 4 import tools.InnerClass.B; 5 6 public class InnerClass { 7 8 interface A {} 9 interface B {} 10 11 static void takesA(A a){} 12 static void takesB(B b){} 13 14 public static void main(String[] args) { 15 16 X x = new X(); 17 Y y = new Y(); 18 //1 19 takesA(x); 20 takesA(y); 21 //2 22 takesB(x); 23 takesB(y.makeB()); 24 } 25 26 } 27 28 class X implements A, B {} 29 class Y implements A { 30 B makeB() { 31 return new B(){}; 32 } 33 }