匿名内部类匿名内部类是指未命名的嵌套类。 这是Java定义类的方法之一。
为什么要在实际开发中使用匿名内部类,3358www.Sina.com/方法的一个接口/类的是程序中的某个实现方式,为了使用它
详细说明一下吧
假设现在有一个接口。 接口只有一种方法
publicinterfaceinterface 01 { voidshow (; }要使用此接口的show方法,必须创建一个实现类,并说明如何具体实现show方法
public class interface 01 implimplementsinterface 01 { @ overridepublicvoidshow . system.out.println (I ' maimplclass )。 }如果只使用一次类接口01i mpl的所有进程,为这次使用创建类就太麻烦了。 我们需要一种摆脱这种困境的方法。 匿名内部类可以很好地解决这个问题。
我们使用匿名的内部类
publicstaticvoidmain (string [ ] args )接口01接口01=new接口01 ) { @Override public void show ) }系统; //接口方法调用接口01.show (; }正常执行的结果
这里使用了匿名内部类
如何使用匿名内部类的基本格式
new接口/类名(参数1、参数2…) (实现方法1 ()实现方法2 ) )…); 在上述使用中,我们在不创建实现类的情况下实现了具体的show方法。 还定义了接口的对象变量interface01。 研究表明,该变量与平时使用多态性后的使用方法没有变化。
通常,您也习惯于以这种方式创建和启动线程
newthread(newrunnable ) ({ @Override public void run ) ) { System.out.println,我是线程); () ).start ); 常见问题匿名内部类是如何实现的
编译上述代码后,请检查class文件的路径
试着反编译一下
现在,匿名内部类在编译时生成名称以$编号结尾的class文件,即只会执行一次,并发现只有编译前(java文件)是匿名形式。
匿名内部类只能在接口上使用吗
不。 匿名内部类可以用于具体类、抽象类和接口,不需要方法的数量。
作为例子,假设存在具体类Class01、抽象类AbstractClass01、接口接口01
//具体类public class class 01 { public void show (strings ) { System.out.println (等) } ); }//抽象类publicabstractclassabstractclass 01 { abstractvoidshow (strings ); //接口publicinterfaceinterface 01 { voidshow (strings ); }测试类TestInner
public class testinner { publicstaticvoidmain (string [ ] args )//如何重写具体类(new Class01 ) }@overridepublicvoidshow ) strrgs //重写抽象类的抽象方法new AbstractClass01 () overridevoidshow ) strings ) { System.out.println (我是(s ) ); } }.show (抽象类); 实现//接口的抽象方法new interface 01 ((@ overridepublicvoidshow ) strings ) { System.out.println ('我是' s ); } }.show (接口); }运行结果
我是具体的班级
我是抽象的班级
我是接口