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

Java 類與成員存取權限的關係探討:默認類配合 public 成員的實戰驗證

     編輯:Java 相關知識

問題背景

在編碼時遇到一個問題:套件內定義一個介面,另一套件實作它,採用介面隔離與依賴倒置原則,將兩套件依賴關係倒置。實作類使用工廠模式實例化,因此實作類不想暴露給套件外,但仍需實作 public 介面。問題來了:若類是 default,成員方法是 public,存取限制究竟如何?

驗證步驟

1. 定義介面(套件 mytest)

package mytest;
public interface ClassAccessTest {
    void getData();
    CharSequence getString();
}

2. 實作類與工廠(套件 classaccesstest)

package classaccesstest;
import mytest.ClassAccessTest;

class ClassAccessTestImp implements ClassAccessTest { // default 類
    int mA = 0;
    ClassAccessTestImp(int a) { mA = a; }
    public void getData() { System.out.println("the data is " + mA); }
    public CharSequence getString() { return "the data is " + mA; }
}

public class Factory {
    public static ClassAccessTest getAccessTest() {
        return new ClassAccessTestImp(10);
    }
}

3. 原套件使用介面

package mytest;
import classaccesstest.Factory;
// import classaccesstest.ClassAccessTestImp; // 故意不導入

public class TestMain {
    public static void main(String[] args) {
        Factory.getAccessTest().getString(); // 正常運作
        // ClassAccessTest test = new ClassAccessTestImp(10); // 編譯錯誤:ClassAccessTestImp not visible
    }
}

執行結果與結論

TestMain 中使用工廠取得介面並呼叫方法 成功;直接 new 實作類 編譯失敗。

結論:Java 中類的存取權限可以小於成員的存取權限。在依賴倒置與套件封裝需求下,可滿足「隱藏實作類、暴露公共介面」的設計目標。

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