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

Java 存取權限控制機制詳解:類與成員的可見性規則

     編輯:Java 相關知識

為什麼需要存取權限控制?

考慮兩個場景:

  1. 工程師 A 編寫類 ClassA,不希望專案中其他類都能存取它。
  2. ClassA 有 fun1、fun2 兩個方法,只想讓 fun1 對外可見。

此時存取權限控制即可發揮作用。

Java 的四種存取權限

default (package-private)、public、private、protected。

注意:只有 default 和 public 可修飾類(指內部類,不含外部類)。修飾類的變數與方法四種權限皆可使用。

修飾類的可見性

default:

該類僅對同一套件中的其他類可見。

public:

該類對所有類可見。

範例 1:同一套件

// Main.java
package com.cxh.test1;
public class Main {
    public static void main(String[] args) {
        People people = new People("Tom");
        System.out.println(people.getName());
    }
}

// People.java
package com.cxh.test1;
class People { // default 類
    private String name;
    public People(String name) { this.name = name; }
    public String getName() { return name; }
}

因同套件,Main 可看見 People,程式正常執行。

範例 2:不同套件

將 People 移至 com.cxh.test2,Main 會報錯「People not visible」。若將 People 改為 public,則可見。

修飾類的方法與變數

修飾符同套件不同套件(非子類)不同套件(子類)
default✅ 可存取❌ 不可存取❌ 不可存取
private❌ 僅本類❌❌
protected✅ 可存取❌✅ 可存取
public✅ 可存取✅ 可存取✅ 可存取

範例 3:default 方法跨套件失敗

若 People 的 getName() 為 default,跨套件呼叫會報錯。

範例 4:protected 方法跨套件僅子類可存取

將方法改為 protected,同套件可存取;不同套件下,只有繼承 People 的子類(如 Man)能存取,無關類則不行。

補充:Java 套件與類檔案常識

  1. 套件主要為避免類名衝突、便利程式碼組織管理。
  2. 一個原始碼檔最多一個 public 類,檔名必須與該類名相同;若無 public 類,檔名可任意命名。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved