在Java中有一种特殊的类,既具有一个完整类的特点,又是另一个类(外部类)的成员,这样的类叫做内部类。本文从两个方面来讲解内部类,1 内部类是外部类的(类)成员;2 内部类是一个具备普通类所有特点的类,并把这两点叫做内部类的 “二象性” (参考初中物理中 “光的波粒二象性”)
类象
代码1
public class Outer{
private class Inner{
void innerPrint(){
System.out.println("inner");
}
}
private Inner inner = new Inner();
public void outerPrint(){
inner.innerPrint();
}
}
启动代码1的main方法
public class Main{
public static void main(String[] args){
Outer outer = new Outer();
outer.outerPrint();
}
}
代码1 中Outer类的 outPrint方法在访问 Inner类的 innerPrint 方法时必须首先创建Inner类的对象,说明 Inner 在这里的 “象” 更倾向于一个类。因为如果把上述 Inner 独立出来再访问 print 方法的话,同样需要先创建 Inner 类对象。
成员象
代码2
public class Outer{
Inner inner = new Inner();
public class Inner{
void innerPrint(){
outerPrint();
}
}
private void outerPrint(){
System.out.println("outer");
}
}
启动代码2的mian方法
public class Main{
public static void main(String[] args){
Outer outer = new Outer();
outer.inner.innerPrint();
}
}
代码2 与代码1的调用方向刚好相反。代码2 说明 Inner 类的 “象” 更倾向于 Outer 类的成员。Inner类以Outer 类成员的身份调用了Outer类的另一个成员outerPrint,如果 Inner类在这里不充当Outer类的成员,则无法实现对Outer类成员outerPrint的调用。
二象性的解释
内部类的二象性与内部类密不可分,只要一个内部类存在,它的二象性就与之相伴。我们能从一段代码或一个角度分析出某一象,是因为在这段代码中相应的象体现的明显些,另一象好像没有出现实际上它一直存在。