匿名内部类是一种特殊的内部类,适合用于创建那些只需要使用一次的类。匿名内部类简称匿名类,没有类名,故不能声明对象,但是可以创建对象。使用匿名类创建对象时,只能用关键字new 借助于超类或接口实现,不具有static和abstract修饰符,并且不能派生子类。匿名类分为:和类相关的匿名类、和接口相关的匿名类。
1.和类相关的匿名类
如果存在一个类,并没有声明该类的子类,但是又想使用子类创建一个对象,此时Java语言允许定义一个没有类的声明部分的子类类体,称为匿名类。它的功能等同于一个子类,但是由于不存在类名,所以只能创建对象,而不能声明对象。定义匿名类的格式如下:
匿名类可以继承父类的方法,也可以重写父类的方法。匿名类属于内部类,符合内部类的一切规则。
与类相关的匿名类的用法,代码如下:
上述代码的运行结果如下:
第2~4行代码定义了一个抽象类Animal,第3行代码定义了Animal类中的抽象方法cry。
第7~12行代码通过匿名类为抽象类的引用对象cat赋值,该匿名类是Animal的子类,并且在子类类体中重写了Animal类中的抽象方法。当把Animal的匿名子类的对象赋值给Animal的引用变量cat时,cat就变成了该匿名子类对象的上转型对象。
第13行语句通过上转型对象调用匿名子类中重写的父类的方法。(www.xing528.com)
2.和接口相关的匿名类
如果一个类实现了某个接口,那么Java语言允许使用该类创建一个匿名类,被创建后的匿名类只有类体,没有类的声明。
与接口相关的匿名类的用法示例代码如下:
上述代码的运行结果如下:
第2~4行代码定义了一个接口Animal,第3行代码定义了接口中的方法cry,因为接口中的所有方法都是抽象的,故cry方法也是抽象的。
第7~11行代码通过匿名类为接口的引用变量cat赋值,该匿名类是接口Animal的实现类,并且在实现类类体中重写了接口Animal中的抽象方法。当把Animal的匿名实现类的对象赋值给Animal接口的引用变量cat时,cat就变成了该匿名实现类对象的上转型对象。
第13行语句通过上转型对象调用匿名实现类中重写的父接口的方法。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。