1. 程式人生 > >java 內部類和向上轉型

java 內部類和向上轉型

當將內部類向上轉型為其基類時,尤其是轉型為一個介面的時候,內部類就有了用武之地,(從實現某個介面的物件,得到對介面的引用,與向上轉型為這個物件的基類,實際上是一樣的效果,),這是因為此內部類---某個介面的實現---能夠完全不可見,並且不可用,所得到的只是指向基類或介面的引用,所以能夠很方便地隱藏實現細節

//: 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(); } } ///:~