内部类
public class Outer {
private final boolean isProp = true;
private static final boolean PROP = false;
/*
* Inner实例化时会保留一份Outer实例引用
* 因此可以访问Outer的成员属性和方法
*/
public class Inner {
public boolean isParentProp() {
return isProp; // ok
}
}
// StaticInner实例不能访问Outer非静态的属性和方法
public static class StaticInner {
public static StaticInner getInstance() {
return new StaticInner();
}
public boolean isParentProp() {
// return isProp // error!
return PROP;
}
}
}
测试类
import org.junit.Assert;
import org.junit.Test;
public class OuterTest {
@Test
public void test1() {
Outer ot = new Outer();
// 实例化内部类,不能new Outer.Inner();
Outer.Inner in = ot.new Inner();
// 静态内部类通过工厂模式实例化
// Outer.StaticInner stin1 = ot.new StaticInner(); // error!
Outer.StaticInner stin2 = Outer.StaticInner.getInstance();
// 测试
Assert.assertTrue(in.isParentProp());
Assert.assertFalse(stin2.isParentProp());
}
}