首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 繼承中 private 成員不可存取的設計哲學:封裝與 is-a 關係的邊界

     編輯:程式設計綜合問答

核心觀念

is-a(繼承)表示「子類型擁有父類型的公開契約」,**不代表**擁有父類的實作細節。private 是實作細節,屬於類別內部封裝,子類別不應依賴。

為何需要 private?

  1. 資訊隱藏:防止外部(含子類)直接操作內部狀態,導致不變條件破壞。
  2. 演進彈性:父類可隨時修改 private 欄位/方法,不影響子類編譯與執行。
  3. 安全性:敏感資料(密碼、金鑰)不應外洩給子類。

正確設計模式

需求建議做法
子類需讀取父類資料父類提供 protected 或 public getter
子類需修改父類狀態父類提供 protected setter 或受控方法
子類需擴充行為父類定義 protected 模板方法 / 抽象方法
完全隱藏實作保持 private,子類完全不知情

程式碼範例

class Parent {
    private String secret = "key"; // 子類不可見
    protected String getSecret() { return secret; } // 受控存取
    protected void setSecret(String s) { this.secret = s; }
}

class Child extends Parent {
    void demo() {
        // System.out.println(secret); // 編譯錯誤
        System.out.println(getSecret()); // 正確
    }
}

總結

private 是封裝的基石,is-a 僅承諾公開/受保護介面的行為相容。**好的繼承設計:父類封裝細節,子類透過受保護介面互動。**

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