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

Java 類訪問權限詳解:public 與包私有類的跨包可見性規則

     編輯:Java 相關知識

Java 類級別僅支持兩種訪問權限:public 與默認(包私有,package-private)。類不能聲明為 private 或 protected(內部類除外)。本文通過雙包項目結構,實證類可見性在同包與跨包場景的具體規則。

項目結構

lession3/
├── Lession3.java                      // 主類,嘗試訪問各類
├── PublicClassSamePackage.java        // 同包 public 類
├── DefaultClassSamePackage.java       // 同包默認類
└── otherpackage/
    ├── PublicClassOtherPackage.java   // 不同包 public 類
    └── DefaultClassOtherPackage.java  // 不同包默認類

代碼示例與訪問結果

主類嘗試訪問


public class Lession3 {
    public static void main(String[] args) {
        // 同包 public 類
        System.out.println(new PublicClassSamePackage().toString()); // ✅
        // 同包默認類
        System.out.println(new DefaultClassSamePackage().toString()); // ✅
        // 不同包 public 類
        System.out.println(new PublicClassOtherPackage().toString()); // ✅
        // 不同包默認類
        // System.out.println(new DefaultClassOtherPackage().toString()); // ❌ 編譯錯誤
    }
}

運行輸出


相同package的公開類
相同package的默認類
其它package的公開類

編譯錯誤現場:跨包訪問默認類

取消註釋訪問 DefaultClassOtherPackage 的代碼,編譯器報錯:

DefaultClassOtherPackage is not visible

原因:默認類僅在聲明包內可見,跨包不可見,甚至無法 import。

實驗驗證清單

  1. 將默認類改為 public → 編譯通過,可跨包訪問
  2. 將同包 public 類去掉修飾符 → 主類仍可訪問(同包不受影響)
  3. 在同包新增類並使用 → 無論 public 或默認,均可訪問
  4. 在不同包新增類並使用 → 必須 public 且 import 才可訪問
  5. 自建新包引用 → 同理,僅 public 類可跨包使用

核心規則總結

場景public 類默認類
同包訪問✅✅
跨包訪問✅ (需 import)❌
文件名要求必須與類名一致無強制要求(建議一致)
單文件數量最多一個 public 類可多個默認類

設計建議

  • 公開 API:Controller、Service 接口、DTO、異常類 → public
  • 內部實現:Impl 類、工具類、領域模型內部類 → 默認權限,隱藏在包內部
  • 包設計原則:高內聚功能放同一包,利用默認權限封裝實現細節,僅暴露 public 門面
  • 測試代碼:測試類置於同包(或 test 同名包),可直接訪問默認類進行白盒測試

理解類級訪問權限的「同包全開、跨包僅公」鐵律,配合合理的包劃分,是實現模塊化封裝、防止實現細節外洩的關鍵手段。

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