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

Java 存取修飾符完整解析:public、protected、default、private

     編輯:Java 相關知識

Java 四大存取修飾符(Access Modifiers)是封裝性的核心機制,決定類別、欄位、方法、建構子對外部的可見性。掌握它們的權限邊界,是寫出高內聚、低耦合程式碼的基礎。本文以表格、圖解、實例全方位解析。

權限對照表(核心速查)

修飾符同一類別同一套件子類別(不同套件)非子類別(不同套件)
public✅✅✅✅
protected✅✅✅❌
default (package-private)✅✅❌❌
private✅❌❌❌

記憶口訣:public 到處行、protected 留給兒子、default 只在自家、private 獨自藏。

關鍵術語釐清

  • 同一類別:類別內部(含巢狀類別)
  • 同一套件:相同 package 宣告下的所有類別
  • 子類別:透過 extends 繼承的類別,不限套件
  • 非子類別(不同套件):完全無關的第三方類別

實戰程式碼驗證


// 基礎類別
package com.example.base;

public class Base {
    public int publicField = 1;
    protected int protectedField = 2;
    int defaultField = 3;          // package-private
    private int privateField = 4;

    public void publicMethod() {}
    protected void protectedMethod() {}
    void defaultMethod() {}
    private void privateMethod() {}
}

// 同套件非子類別
package com.example.base;

public class SamePackage {
    void test(Base b) {
        b.publicMethod();      // ✅
        b.protectedMethod();   // ✅
        b.defaultMethod();     // ✅
        // b.privateMethod();  // ❌ 編譯錯誤
    }
}

// 不同套件子類別
package com.example.derived;

import com.example.base.Base;

public class Derived extends Base {
    void test() {
        publicMethod();        // ✅ 繼承而來
        protectedMethod();     // ✅ 繼承而來
        // defaultMethod();    // ❌ 不同套件不可見
        // privateMethod();    // ❌ 私有不繼承
    }
}

// 不同套件非子類別
package com.example.other;

import com.example.base.Base;

public class Other {
    void test(Base b) {
        b.publicMethod();      // ✅
        // b.protectedMethod(); // ❌ 非子類別不可見
        // b.defaultMethod();   // ❌
        // b.privateMethod();   // ❌
    }
}

類別層級修飾符(頂層類別)

修飾符說明
public任何地方可存取,檔名必須與類別名相同
default同套件可存取,一個 .java 檔只能有一個 public 類別,可有多個 default 類別

注意:頂層類別不能使用 protected 或 private(巢狀類別除外)。

最佳實踐原則

  1. 預設用 private:欄位、內部方法優先 private,僅在需要時放寬
  2. 公開行為用 public:對外 API、介面實作方法
  3. 繼承擴充用 protected:允許子類別覆寫/存取的內部實作細節
  4. 套件內協作用 default:同模組內類別互相存取,不想暴露給外部模組
  5. Getter/Setter 封裝欄位:不要直接暴露 public 欄位(常數除外)

常見誤區

誤區正確觀念
protected 等同「同套件 + 子類別」protected = 同套件 或 子類別(跨套件也可見)
介面方法可用 protected介面方法隱含 public,不可加其他修飾符
子類別可繼承 private 方法private 成員不被繼承,子類別中可另寫同名方法但無關聯
default 是關鍵字default 是不寫修飾符的預設行為,Java 8+ 介面預設方法才用 default 關鍵字

模組化系統 影響

Java 9+ 引入模組系統,module-info.java 中的 exports、opens 會進一步限制跨模組存取,甚至比修飾符優先級更高。模組化專案請同時參考模組宣告。

熟練掌握四大修飾符,配合「最小權限原則」,即可設計出安全、可維護、易擴充的 Java 類別架構。

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