当将内部类向上转型为其基类,尤其是转型为一个接口
的时候,内部类就有了用武之地:能够很方便地隐藏实现细节。
//: innerclasses/Destination.java
//客户端程序员可用的接口
public interface Destination {
String readLabel();
} ///:~
//: innerclasses/Contents.java
//客户端程序员可用的接口
public interface Contents {
int value();
} ///:~
//: innerclasses/TestParcel.java
class Parcel4 {
private class PContents implements Contents{
private int i = 11;
@Override
public int value() { return i; }
}
protected class PDestination implements Destination {
private String label;
private PDestination(String whereTo) {
label = whereTo;
}
@Override
public String readLabel() { return label; }
}
public Destination destination(String s) {
return new PDestination(s);
}
public Contents contents() {
return new PContents();
}
}
public class TestParcel {
public static void main(String[] args) {
Parcel4 p = new Parcel4();
Contents c = p.contents();
Destination d = p.destination("Tasmania");
// 不能访问私有类
//! Parcel4.PContents pc = p.new PContents();
}
} ///:~
说明:本文是对第四版Java编程思想第10.4节内部类与向上转型的归纳整理。