如果匿名内部类实现接口,则在定义匿名类时创建对象的格式如下:
由于在接口中没有构造方法,所以在定义接口实现的匿名内部类并用其创建匿名内部类的对象时,接口名后面的()内不加任何参数。
【例6.9】定义PrintLetter接口,在ScreenShow类中的show(PrintLetter letter)方法的参数是PrintLetter接口变量,其可以接收PrintLetter接口的实现类对象。在Example6_9类的主方法中,show(PrintLetter letter)方法接收的是PrintLetter接口的匿名内部实现类的对象。传递show(PrintLetter letter)方法的参数时采用了两种形式:第一种将匿名类对象赋值给接口变量,将接口变量传递给show(PrintLetter letter)方法;第二种给show(PrintLetter letter)方法传参数时,直接把创建出来的匿名类对象传递给show()方法。同时让ScreenShow对象调用show(PrintLetter letter)方法,而在show(PrintLetter letter)方法中调用匿名类中重写的print()方法,以实现输出英文小写字母及俄文小写字母,属于多态的应用。
如果需要多次使用匿名类创建的对象,可把创建的匿名类对象赋值给父类引用变量或接口引用变量,但这种赋值形式,只能调用到在匿名类中重写的父类或接口中的方法,如果想调用到匿名类中新增的成员,只能在直接创建出匿名类对象时进行调用,但此类对象只能使用一次,即在创建时使用。因此匿名类通常是用来重写父类或接口中的方法,较少在匿名类中新增成员方法。
匿名内部类说明:
(1)匿名内部类没有类名,因此匿名内部类不能定义构造方法,匿名内部类是唯一一种无构造方法的类。
(2)匿名内部类没有构造方法,因此在创建匿名内部类时就必须创建其实例对象,因此匿名内部类不能是抽象类,匿名内部类必须实现接口或抽象父类的所有抽象方法。(www.daowen.com)
(3)一个匿名内部类只能继承唯一的一个父类或实现唯一的一个接口,在匿名内部类中除了实现父类或接口中所有抽象方法,也可以添加自定义方法。
(4)匿名内部类属于局部内部类,匿名内部类没有访问修饰符和static修饰符。
(5)当匿名内部类和外部类有同名变量(方法)时,匿名内部类中默认访问匿名内部类中同名变量或同名方法,若要访问外部类的同名变量或方法需要加上外部类的类名。
(6)匿名内部类在编译时由系统自动起名为外部类名$1.class。
(7)匿名内部类可以访问外部类任何变量和方法。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。