package innerclass;
public class OuterA {
public int i = 0;
public static int d = 1;
public void a_test(String s) {
System.out.println("a_test:" + s + "_" + i);
//j ++; //此处调用错误,外部类不能直接调用内部类的实例变量
System.out.println(InnerB.p);
}
public static void a_test2() {
System.out.println("aaaaaaaaaaa");
}
class InnerA {
public int j = 100;
public void test() {
i ++; //内部类持有外部类的实例 A.this.i
a_test("test inner a."); //内部类持有外部类的实例
}
}
static class InnerB {
public int k = 200;
public static int p = 300;
public void test() {
// a_test("aa"); //静态内部类不持有外部类的实例,不能直接调用
OuterA.a_test2(); //静态内部类与静态内部方法相似,只能访问外部类的static成员,不能直接访问外部类的实例变量,与实例方法,只有通过对象引用才能访问
System.out.println("test inner b." + OuterA.d);
}
}
public static void main(String[] args) {
OuterA oa = new OuterA();
//内部类的实例需要通过外部类的实例进行创建,与实例变量需要通过对象来访问相似
OuterA.InnerA ia = oa.new InnerA();
// OuterA.InnerA ia1 = new OuterA.InnerA(); //错误
ia.test();
//静态内部类不通过外部实例就可以创建对象;与类变量可以通过类名访问相似
OuterA.InnerB ib = new OuterA.InnerB();
ib.test();
}
}