/*
* 2018年3月26日10:34:00
* 代码目的:
* 简单演示匿名内部类的使用语法
* 匿名内部类中使用实例初始化语法模拟构造器的用法
*
* */
//: innerclasses/Destination.java
public interface Destination {
String readLabel();
} ///:~
//: innerclasses/Parcel9.java
// An anonymous inner class that performs
// initialization. A briefer version of Parcel5.java.
public class Parcel9 {
// Argument must be final to use inside
// anonymous inner class:
//如果定义了一个内部类,并且希望它使用一个在其外部定义的对象,
//那么编译器会要求其参数为final的。
public Destination destination(final String dest) {
//匿名内部类语法:
/*
* 这种奇怪的语法指的是:创建一个继承自Destination的
* 匿名类的对象。通过new表达式返回的引用被自动向上转型
* 为对Destination的引用。
* */
return new Destination() {
//在匿名内部类中不可能有命名构造器,但通过实例初始化
//就能够达到为匿名类创建一个构造器的效果
{
System.out.println("Destination()");
}
private String label = dest;
public String readLabel() { return label; }
};
}
public static void main(String[] args) {
Parcel9 p = new Parcel9();
Destination d = p.destination("Tasmania");
System.out.println(d.readLabel());
}
} ///:~
/*
* ==============
* Destination()
* Tasmania
* ==============
* */