网站大量收购独家精品文档,联系QQ:2885784924

匿名内部类精讲.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
匿名内部类精讲

匿名内部类精讲 匿名内部类适合创建那种只需要一次使用的类,例如命令模式时所需要的Command对象。匿名内部类的语法有点奇怪,创建匿名内部类时会立即创建一个该类的实例,这个类定义立即消失,匿名内部类不能重复使用。 ??? 定义匿名内部类的格式如下: [java]?view plaincopy new?父类构造器(参数列表)|实现接口()?? {?? ?//匿名内部类的类体部分?? }?? ? 从上面定义可以看出,匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口。 ?关于匿名内部类还有如下两条规则: ?1)匿名内部类不能是抽象类,因为系统在创建匿名内部类的时候,会立即创建内部类的对象。因此不允许将匿名内部类定义成抽象类。 ?2)匿名内部类不等定义构造器,因为匿名内部类没有类名,所以无法定义构造器,但匿名内部类可以定义实例初始化块,?通过实例初始化块来完成构造器需要完成的事情。最常用的创建匿名内部类的方式是需要创建某个接口类型的对象,如下程序所示: [java]?view plaincopy interface?Product{?? ???public?double?getPrice();?? ???public?String?getName();?? }?? public?class?TestAnonymous{?? ???public?void?test(Product?p){?? ???System.out.println(购买了一个+p.getName()+,花掉???????了+p.getPrice());?? ??}?? ?public?static?void?main(String[]args){?? ????TestAnonymous?ta?=?new?TestAnonymous();?? ????ta.test(new?Product(){?? ????public?double?getPrice(){?? ???????return?567;?? ????}?? ???public?String?getName(){?? ??????return?AGP显卡;?? ???}?? ??});?? ?}?? }?? ? 上面程序中的TestAnonymous类定义了一个test方法,该方法需要一个Product对象作为参数,但Product只是一个接口, 无法直接创建对象,因此此处考虑创建一个Product接口实现类的对象传入该方法---如果这个Product接口实现类需要重复 使用,则应该经该实现类定义一个独立类;如果这个Product接口实现类只需一次使用,则可采用上面程序中的方式,定义 一个匿名内部类。 ??? 正如上面程序中看到,定义匿名类不需要class关键字,而是在定义匿名内部类时直接生成该匿名内部类的对象。上面 粗体字代码部分就是匿名类的类体部分。 ?由于匿名内部类不能是抽象类,所以匿名内部类必须实现它的抽象父类或者接口里包含的所有抽象方法。 ?对于上面创建Product实现类对象的代码,可以拆分成如下代码: [java]?view plaincopy class?AnonymousProduct?implements?Product{?? ??public?double?getPrice(){?? ???return?567;?? ????}?? ??public?String?getName(){?? ???return?AGP显卡;?? ????}?? ?}?? ?ta.test(new?AnonymousProduct());?? ? ?当通过实现接口来创建匿名内部类时,匿名内部类也不能显示创建构造器,因此匿名内部类只有一个隐式的无参数构造 器,故new接口名后的括号里不能传入参数值。 ??? 但如果通过继承父类来创建匿名内部类是,匿名内部类将拥有和父类相似的构造器,此处的相似指的是拥有相同的形参列表。 ? ? ? abstract?class?Device{?? ??private?String?name;?? ??public?Device(){?? ??}?? ??public?Device(String?name){?? ???this.name?=?name;?? ??}?? ??public?abstract?double?getPrice();?? ??//此处省略了name属性的setter和getter方法?? ?}?? ?public?class?AnonymousInner{?? ??public?void?test(Device?d){?? ???System.out.println(购买了一个+d.getName()+,花掉了+d.g

文档评论(0)

almm118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档