classInnerClassDemo{ publicstaticvoidmain(String[] args){ Outer.Inner oi = new Outer.Inner(); oi.show(); oi.show2(); System.out.println("----------"); //show2()的另一种调用方式 Outer.Inner.show2(); } }
思考
问
填空,要求分别输出30,20,10
classOuter{ publicint num = 10; classInner{ publicint num = 20; public viod show(){ int num = 30; System.out.println(?); System.out.println(?); System.out.println(?); } } }
答
classOuter{ publicint num = 10; classInner{ publicint num = 20; public viod show(){ int num = 30; System.out.println(num); System.out.println(this.num); System.out.println(Outer.this.num); } } } classInnerClassDemo4{ publicstaticvoidmain(String[] args){ Outer.Inner oi = new Outer().new Inner(); oi.show(); } }
注意:
内部类和外部类没有继承关系
通过外部类名限定this对象,(Outer.this)
局部内部类
可以直接访问外部类的成员
在局部位置,可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能
classOuter{ privateint num = 10; publicvoidmethod(){ classInner{ publicvoidshow(){ System.out.println(num); } } // 创建内部类对象 Inner i = new Inner(); i.show(); } }
classInnerClassDemo4{ publicstaticvoidmain(String[] args){ // 创建外部类对象,调用method()方法 Outer o = new Outer(); o.method(); } }
思考
问
局部内部类如何访问局部变量?
答
classOuter{ privateint num = 10; publicvoidmethod(){ finalint num = 20; classInner{ publicvoidshow(){ // 从内部类中访问本地变量num; 需要被声明为最终类型 System.out.println(num); } } Inner i = new Inner(); i.show(); } }
classInnerClassDemo5{ publicstaticvoidmain(String[] args){ Outer o = new Outer(); o.method(); } }