public class OutClassTest { private String o1="外部类的变量111"; private static String o2="外部类的静态变量222"; public void outMethod(){ System.out.println("外部类的方法。"); } // public C c = new C();外部类根本不知道局部内部类的存在,所以访问不了 class InClassTest{ public String i1="222"; A a=new A(); InClassTest2 test2=new InClassTest2(); /** * 非静态内部类可以直接访问所有的外部类的成员 */ public void inMethod(){ System.out.println("非静态内部类的方法。"); outMethod(); System.out.println(o1); System.out.println(test2.i2); System.out.println(a.a); } } class InClassTest2{ public String i2="333"; } public static class A{ public int a=10; public static int b =100; // InClassTest inClassTest=new InClassTest(); public void aMethod(){ System.out.println("静态内部类的方法。"); B b=new B(); /** * 静态内部类可直接访问外部类的静态成员,但不能直接访问外部类的非静态成员,需要实例化 */ System.out.println(o2); OutClassTest outClassTest=new OutClassTest(); outClassTest.outMethod(); System.out.println(outClassTest.o1); } } public static class B{ public int a=20; public static int b =200; } public void cMethod(){ /** * 局部内部类跟实例内部类一样能访问外部类的所有成员 * @author Administrator * */ class C{ private int a=30; public int aa=300; } } public static void main(String[] args) { OutClassTest out=new OutClassTest(); out.outMethod(); /** * 在外部类中不能直接访问内部类的成员,必须通过内部类的实例才可访问 */ OutClassTest.InClassTest test=new OutClassTest().new InClassTest(); /* * 外部类中可直接访问静态内部类中的静态变量,若要访问静态内部类中非静态变量则需要实例化才行 */ System.out.println(A.b); OutClassTest.A in = new OutClassTest.A(); in.a=1000; System.out.println(""+in.a); } }