首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 內部類與上溯造型:隱藏實現細節的終極武器

     編輯:Java 相關知識

為什麼光有 package-private 不夠?

包級可見性仍允許同包類依賴具體實現類。內部類配合上溯造型:

  • 內部類設為 private/protected,外部完全不可見。
  • 只返回基類/接口引用,客戶代碼無法下溯造型(找不到類名)。
  • 實現細節徹底封裝,編譯器可優化生成更高效代碼。

Parcel3 完整示例

public class Parcel3 {
    private class PContents extends Contents { ... } // 完全隱藏
    protected class PDestination implements Destination { ... } // 僅繼承者可見

    public Destination dest(String s) { return new PDestination(s); }
    public Contents cont() { return new PContents(); }
}

class Test {
    Parcel3 p = new Parcel3();
    Contents c = p.cont();           // OK
    Destination d = p.dest("Tanzania"); // OK
    // Parcel3.PContents c2 = p.new PContents(); // 編譯錯誤:private 不可見
}

關鍵點

  1. PContents 為 private,連同包類都不可訪問,徹底封裝。
  2. PDestination 為 protected,允許繼承者訪問,平衡擴展與封裝。
  3. 客戶代碼只持有 Contents/Destination 引用,不知具體類型,也無法強轉。
  4. 普通類不能設為 private/protected,這是內部類獨有優勢。

設計建議

「接口/抽象類定義契約,private 內部類實現細節,公開方法返回接口引用。」
這是 Java 實現「接口與實現分離」最徹底、編譯器支持最好的模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved