博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Thinking in java中内部类的例子。
阅读量:6530 次
发布时间:2019-06-24

本文共 929 字,大约阅读时间需要 3 分钟。

描述简单清晰!

-------

下面这个例子看起来有些奇怪:

//: Parcel6.java// A method that returns an anonymous inner classpackage c07.innerscopes;public class Parcel6 {  public Contents cont() {    return new Contents() {      private int i = 11;      public int value() { return i; }    }; // Semicolon required in this case  }  public static void main(String[] args) {    Parcel6 p = new Parcel6();    Contents c = p.cont();  }} ///:~

cont()方法同时合并了返回值的创建代码,以及用于表示那个返回值的类。除此以外,这个类是匿名的——它没有名字。而且看起来似乎更让人摸不着头脑的是,我们准备创建一个Contents对象:
return new Contents()
但在这之后,在遇到分号之前,我们又说:“等一等,让我先在一个类定义里再耍一下花招”:

return new Contents() {  private int i = 11;  public int value() { return i; }};

这种奇怪的语法要表达的意思是:“创建从Contents衍生出来的匿名类的一个对象”。由new表达式返回的句柄会自动上溯造型成一个Contents句柄。匿名内部类的语法其实要表达的是:

class MyContents extends Contents {    private int i = 11;    public int value() { return i; }}return new MyContents();

 

转载于:https://www.cnblogs.com/xzs603/archive/2012/11/25/2787646.html

你可能感兴趣的文章
React Native系列——微信分享
查看>>
我的友情链接
查看>>
python模块介绍-threading: 线程 管理并发操作
查看>>
我的友情链接
查看>>
从Exchange 通往Office 365系列(六)配置MailBox高可用
查看>>
SCWS-1.2.3 安装说明
查看>>
三大容器: Docker、Rocket/rkt 和openVZ/Odin
查看>>
IBM 3650安装suse 11sp1时报错
查看>>
PHP 分页技术
查看>>
基于虚拟帐号的邮件系统
查看>>
画图学习
查看>>
电商精细化经营渐成趋势
查看>>
4.4grep及egrep的用法
查看>>
TI DM8168平台下live555 移植日志(一)
查看>>
紫光“神马”科技,通和“浮云”业务
查看>>
爱走了,我离开
查看>>
网页设计排版中哪些元素最重要?
查看>>
eclipse开发配置热部署jrebel
查看>>
分布式数据库概要
查看>>
HashMap的hash算法(解决冲突的方式)
查看>>