classDemo1{publicstaticvoidmain(String[] args){//错误的访问//outer.inner oi = new outer.new inner();//oi.method();//正确的访问
outer o =newouter();
outer.print();}}classouter{privateint num =10;//匿名内部类privateclassinner{publicvoidmethod(){
System.out.println(num);}}//公共方法访问内部类publicvoidprint(){
inner i =newinner();
i.method();}}
面试题:
//要求:使用已知的变量,在控制台输出30,20,10,下面问好中填写什么 classOuter{publicint num =10;classInner{publicint num =20;publicvoidshow(){int num =30;
System.out.println(?);//
System.out.println(??);//
System.out.println(???);//}}classInnerClassTest{publicstaticvoidmain(String[] args){
Outer.Inner oi =newOuter().newInner();
oi.show();}}
答案:
num
this.num
outer.this.num
匿名内部类
内部类的简化写法,前提是要存在一个类或者一个接口,因为类没有名字。
interfaceinter{//创建一个接口publicvoidprint();}classOuter{publicvoidmethod(){newInter(){//创建匿名内部类(要不继承类,要不实现接口)publicvoidprint(){//重写接口inter的print方法
System.out.println("print");}}.print();//调用匿名内部类的方法}}classInnerClassTest{publicstaticvoidmain(String[] args){
Outer o =newOuter();
o.method();}