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

[Java 100 例] 008 - 類別存取修飾子與跨套件存取控制

     編輯:Java 程式設計入門

本例透過三個位於不同套件的類別,示範 Java 四種存取修飾子(public、protected、default、private)對成員方法的可見性影響。重點在於同一套件與不同套件(含子類別)的存取差異。

程式碼結構

// 套件 e8.com
package e8.com;

public class ClassDemo1 {
    // 公有方法:任何類別可存取
    public void method1() {
        System.out.println("這是公有方法!任何類別都可以存取。");
    }
    // 受保護方法:同套件或子類別可存取
    protected void method2() {
        System.out.println("這是受保護方法!只有同套件或子類別可存取。");
    }
    // 私有方法:僅本類別可存取
    private void method3() {
        System.out.println("這是私有方法!只有類別本身可存取。");
    }

    public static void main(String[] args) {
        ClassDemo1 d = new ClassDemo1();
        d.method1(); d.method2(); d.method3(); // 全部可存取
    }
}

// 同套件 e8.com 的另一個類別
package e8.com;
public class ClassPlay {
    public static void main(String[] args) {
        ClassDemo1 d = new ClassDemo1();
        d.method1(); // OK
        d.method2(); // OK(同套件)
        d.method3(); // 編譯錯誤:private 不可存取
    }
}

// 不同套件 e8.net 的類別(非子類別)
package e8.net;
import e8.com.*;
public class ClassPlay {
    public static void main(String[] args) {
        ClassDemo1 d = new ClassDemo1();
        d.method1(); // OK
        d.method2(); // 編譯錯誤:不同套件且非子類別,protected 不可存取
        d.method3(); // 編譯錯誤
    }
}

存取權限對照表

修飾子同一類別同一套件不同套件的子類別不同套件非子類別
public✔✔✔✔
protected✔✔✔✘
default (無)✔✔✘✘
private✔✘✘✘

關鍵觀察

  • ClassDemo1 內部可呼叫所有方法。
  • 同套件 e8.com.ClassPlay 可存取 public、protected、default 成員,但不可存取 private。
  • 不同套件 e8.net.ClassPlay 僅能存取 public 成員;protected 僅限繼承關係的子類別存取(此處非子類別故失敗)。
  • 若 e8.net 中有類別繼承 ClassDemo1,則該子類別可存取 protected 方法。

最佳實務

  1. 封裝性:預設使用 private,僅對外暴露必要的 public API。
  2. 繼承設計:需提供給子類別覆寫或使用的內部方法,標記為 protected。
  3. 套件內協作:同一模組內的類別可使用 default(包私有)減少公開介面。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved