1.为什么我们需要内部类的存在?这是因为,在java的设计规范中,出于面向对象的逻辑清晰得角度考虑,java的设计者禁止了西加加中常见的多重继承的现象,限制java类只能继承一个父类。为了弥补多重继承被禁止带来的影响,java提出了接口的概念,但是,内部类的提出则进一步完善了这个方案。这是因为,按照java编程思想中的原话来说,内部类最吸引人的地方在于,每个内部类都能独立的继承自一个实现,所以无论外围类是否已经继承了某个实现,对于内部类都没有影响。
举个例子,
package test;
interface p204_A{}
interface p204_B{}
class X implements p204_A,p204_B{}
class Y implements p204_A{
p204_B makeB(){
return new p204_B(){
};
}
}
public class p204 {
static void takesA(p204_A a){}
static void takesB(p204_B b){}
public static void main(String args[]){
X x=new X();
Y y=new Y();
takesA(x);
takesA(y);
takesB(x);
takesB(y.makeB());
}
}
如果单纯的看,其实X和Y两种实现接口的方式都很正确。但是,在一些其他情行下,内部类可以做到接口同学儿做不到的。例如如下:
package test;
class D{}
abstract class E{}
class Z extends D{
E getE(){
return new E(){};
}
}
public class p204 {
static void takesD(D d){}
static void takesE(E e){}
public static void main(String args[]){
Z z=new Z();
takesD(z);
takesE(z.getE());
}
}
如上,如果拥有的是抽象的类或者具体的类,而不是接口,那就只能使用内部类才能实现多重继承。(lz在这里插一句话,考研复试的时候,还装逼给老师说,java中出于安全性考虑,不允许多重继承,真是too simple,too naive。)