描述简单清晰!
-------
下面这个例子看起来有些奇怪:
cont()方法同时合并了返回值的创建代码,以及用于表示那个返回值的类。除此以外,这个类是匿名的——它没有名字。而且看起来似乎更让人摸不着头脑的是,我们准备创建一个Contents对象:return new Contents()但在这之后,在遇到分号之前,我们又说:“等一等,让我先在一个类定义里再耍一下花招”://: 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(); }} ///:~
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();