java 内部类和向上转型

时间:2022-01-23 14:29:01

当将内部类向上转型为其基类时,尤其是转型为一个接口的时候,内部类就有了用武之地,(从实现某个接口的对象,得到对接口的引用,与向上转型为这个对象的基类,实际上是一样的效果,),这是因为此内部类---某个接口的实现---能够完全不可见,并且不可用,所得到的只是指向基类或接口的引用,所以能够很方便地隐藏实现细节

//: innerclasses/Destination.java
package object;
public interface Destination {
String readLabel();
} ///:~
//: innerclasses/Contents.java
package object;
public interface Contents {
int value();
} ///:~
//: innerclasses/TestParcel.java
package object;
class Parcel4 {
private class PContents implements Contents { //private类除了直接外部类parcel4,没人可以访问
private int i = 11;
public int value() { return i; }
}
protected class PDestination implements Destination {//protect类只有直接外部类及其子类可以访问,还有同一个包的可以访问
private String label;
private PDestination(String whereTo) {
label = whereTo;
}
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");
// Illegal -- can't access private class:
//! Parcel4.PContents pc = p.new PContents();
}
} ///:~