java的匿名类.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java的匿名类

abstract class Animal {public abstract void cry();}classTestCry {public void testCry(Animal animal) {animal.cry(); }}public class Example{public static void main(String[] args) {TestCry cry = new TestCry () ;cry.testCry(new Animal (){public void cry() {System.out.println(Cat is crying!); } });cry.testCry(new Animal (){public void cry() {System.out.println(Dog is crying!); } }); // ... 省略其他 }} 先看段伪代码abstract class Father(){ ....}public class Test{ Father f1 = new Father(){ .... } //这里就是有个匿名内部类}一般来说,new 一个对象时小括号后应该是分号,也就是new出对象该语句就结束了。但是出现匿名内部类就不一样,小括号后跟的是大括号,大括号中是该new 出对象的具体的实现方法。因为我们知道,一个抽象类是不能直接new 的,必须先有实现类了我们才能new出它的实现类。上面的伪代码就是表示new 的是Father的实现类,这个实现类是个匿名内部类。其实拆分上面的匿名内部类可为classSonOne extends Father{ ... //这里的代码和上面匿名内部类,大括号中的代码是一样的}public class Test{ Father f1 = new SonOne() ;}匿名内部类就是没有名字的内部类。什么情况下需要使用匿名内部类?如果满足下面的一些条件,使用匿名内部类是比较合适的:1、只用到类的一个实例。2、类在定义后马上用到。3、类非常小(SUN推荐时在4行代码以下)。4、给类命名并不会导致你的代码更容易被理解。在使用匿名内部类时,要记住以下几个原则:匿名内部类不能有构造方法。匿名内部类不能定义任何内部成员、方法和类。匿名内部类不能是public,protected,private,static。只能创建匿名内部类的一个实例。一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。匿名类型可能对部分开发人员来说这个名字有点陌生。? 对于类型,通常是有名称的,比如值类型和引用类型一文提到的class 和struct关键字命名的一个类型。? 匿名类型:顾名思义,当然是没用使用class 或者struct关键字命名的类型。它是使用new关键字和对象初始值进行声明的(它是直接从对象派生的引用类型).? 它的对象的初始值可以是已经命名的,也可以是未命名的。它为我们提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型,这样使代码更加简洁。? 匿名类型最得到的类型当然是匿名啦(有点废话),因此,我们就要使用类型推断(var关键字)把这个类型赋值给一个对象。? 对于var关键字,哈哈,当然不是跟javascript的var一样的(又是废话),它是C# 3.0开始新增的特性,称为类型推断。而推断类型可以是内置类型、匿名类型、用户定义类型、.NET?fk类库中定义的类型或任何表达式。?好了,直接上代码比较直观一点,代码中分别名为?a 和?b跟c 的属性初始化的匿名类型(未名命),而a 即为string , b 为int,c我们使用了显式转换为(decimal)型(注意:匿名类型无法强制转换为除 object 以外的任何类型)?using System;usingSystem.Collections.Generic;usingSystem.Text;namespaceBlog.Sample{class Program {staticvoid Main(string[] args) {varobj = new { a = this is only a test, b = 10, c = (decimal)20 };Console.WriteLine(Anonymous value : \n A={0},\n B={1},\n C={2},obj.a, obj.b, obj.c);Console.R

文档评论(0)

haihang2017 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档