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

Java protected 修飾詞適用場景深度解析

     編輯:程式設計疑難解答

核心定義

protected 成員對以下可見:

  • 同一 套件 內的所有類別
  • 不同套件的 子類別

介於 package-private(無修飾詞)與 public 之間。

實際適用場景

1. 設計給子類別擴充的「模板方法」


public abstract class AbstractParser {
    // 子類可覆寫,外部不可直接呼叫
    protected abstract void parseHeader(InputStream in);
    
    public final void parse(InputStream in) {
        parseHeader(in);           // 受保護鉤子
        parseBody(in);             // 固定流程
        parseFooter(in);
    }
}

2. 內部資料結構的「受控存取」


class Node {
    protected Node left, right;  // 同套件樹演算法可直接操作,外部封裝
    protected int value;
}

3. 框架/庫開發:提供「擴充點」而非「使用點」

  • Spring AbstractApplicationContext 的 protected void refresh()
  • Servlet GenericServlet 的 protected void init()

對照表

修飾詞同類同套件子類(異套件)外部類
private✅❌❌❌
package-private✅✅❌❌
protected✅✅✅❌
public✅✅✅✅

設計原則

「預設用 private,需要同套件協作用 package-private,需開放給子類擴充才用 protected,最後才考慮 public。」

濫用 protected 會破壞封裝,導致子類過度耦合父類實作細節。

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