1. 成员内部类
成员内部类可以看成是外部类的一个成员,在成员内部类中无法声明静态成员,但static
final字段是个例外。我们知道加载类时,会先初始化静态成员,如果成员内部类有静态成
员,那么内部类就会在外部类之前生成,而内部类是为外部类服务的,内部类在外部类之
前就生成可能会脱离掌控。在实例化成员内部类时,成员内部类会持有一个外部类当前对
象的引用,这样在成员内部类中就可以直接访问外部类的成员,即使是private修饰的。
package com.zte.InnerClass;
import static java.lang.System.out;
public class InnerClassTest {
private String outerName = "outer";//外部类无法直接访问内部类的成员,需要实例化内部类对象
private Inner inner = new Inner();
public class Inner {
private String innerName = "inner";
public void show() {
out.println(outerName); //可以直接访问外部类的成员
}
}
public void show() {
out.println(inner.innerName);
inner.show();
}
public static void main(String[] args) {
InnerClassTest outer = new InnerClassTest();
outer.show();
//实例化内部类
InnerClassTest.Inner inner = outer.new Inner();
inner.show();
}
}
console输出结果:
inner
outer
outer
Debug分析如下,当重新实例化内部类时