《Java之匿名内部类个人见解》
- Java中有个特殊的地方在于类中定义类,即内部类,其中可能最为迷惑的就是匿名内部类。
- 顾名思义,匿名内部类即是没有名字的类,它相当于接口(或抽象类)的子类。而在其中常常涉及到了多态特征,即存在继承关系,重写父类方法,父类引用子类对象!而在匿名内部类中常常会涉及到多态这一特征,尤其是父类引用子类对象这一条件经常在匿名内部类的运用中所体现!这一点非常有助于理解匿名内部类运用。
- 在讲解匿名内部类之前,我们需要了解到它的固定格式:new 接口名(抽象类名) {…};
解释:
- 它的固定格式体现出它的本质就是一个对象。
- 再者就是它是实现接口(或继承抽象类)的子类对象,可以直接通过对象调用方法。
- 花括号中的内容即是实现对于相应抽象方法。
匿名内部类应用的三种场景:
1.匿名内部类在return位置上:
解释:主函数中是链式调用,即Out1类的show1方法返回的结果为Inter1类型对象,通过对象调用其中相应的print1方法
2.匿名内部类直接体现其作为子类对象这一特点,并调用其中实现的方法。
解释:从中不难看出匿名内部类作为show2方法中单独的一条语句,在对于接口中抽象方法实现之后,在其后通过了其本身又是接口实现类对象这一特点进行了抽象print2方法的调用。
3.方法的形参为接口类型,匿名内部类作为实参进行传入。
解释:Out3类中的show3方法的参数类型为Inter3接口类型,从而我们可以在进行调用方法传参的时候进行匿名内部类的运用,实现了Inter3接口的实现类对象被Inter3接口类型的参数所引用,从而间接的体现出了多态这一重要特征。形参p得到了Inter3接口的实现类的对象,从而可以直接调用相应的抽象方法。
总结:
匿名内部类的运用当中,不难看到多态这一特征的运用,但是需要注意的是,匿名内部类在方便实现接口或继承抽象类的同时,也有它的局限性,即接口或抽象类中的抽象方法,仅仅有一个!不满足这一条件时,匿名内部类并不在适用以上的三种场景!