public class c { public static void main(String[] args) { //Inner i = new Inner(); //i.method(); //外部类名.内部类名 = 外部类对象.内部类对象 //Outer.Inner oi = new Outer().new Inner(); //创建内部类对象 //oi.method(); /*Outer o = new Outer();//成员内部类私有使用 o.pro();*/ Outer.Inner in = new Outer.Inner(); in.method(); in.pro(); Outer.Inner.pro(); } } class Outer { private int num = 10; /*class Inner { public void method() { System.out.println(num); }*/ /*private class Inner { public void method() { System.out.println(num); } }*/ static class Inner { public void method() { System.out.println("hello"); } public static void pro(){ System.out.println("hellopro"); } } /*public void pro(){ Inner i = new Inner(); i.method(); }*/ } 要求:使用已知的变量,在控制台输出30,20,10。 class Outere { public int num = 10; class Inner { public int num = 20; public void show() { int num = 30; System.out.println(num); System.out.println(this.num); System.out.println(Outere.this.num); //内部类之所以能获取到外部类的成员,是因为他能获取到外部类的引用外部类名.this } } } class InnerClassTest { public static void main(String[] args) { Outer.Inner oi = new Outere().new Inner(); oi.show(); } } /* 局部内部类访问局部变量的问题(类中的方法中的类) 局部内部类访问局部变量必须用final修饰 局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么? 因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的, 当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了, 如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用 */ //局部内部类 class Outeree { public void method() { final int num = 10; class Inner { public void print() { System.out.println(num);//局部内部类访问局部变量 } } Inner i = new Inner(); i.print(); } /*public void run() { Inner i = new Inner(); //局部内部类,只能在其所在的方法中访问 i.print(); }*/ } class Demo_Inner { public static void main(String[] args) { Outeree o = new Outeree(); o.method(); } }