類未聲明 public(包私有),其內部方法聲明 public 是否有意義?感覺與包私有方法無區別。
當包私有類實現 public 接口時,必須將接口方法實現為 public,否則編譯報錯。這是多態調用的基礎。
// 公共接口
public interface TestingInterface {
void show();
}
// 包私有類實現接口
class N implements TestingInterface {
@Override
public void show() { // 必須 public
System.out.println("這個方法可以被外部通過接口調用");
}
}
// 外部類持有接口引用
public class TestA {
private N n = new N(); // 內部持有具體實現
// 對外暴露接口類型,隱藏實現細節
public TestingInterface getN() {
return n;
}
}
// 客戶端代碼(不同包)
public class Client {
public static void main(String[] args) {
TestA testA = new TestA();
TestingInterface ti = testA.getN(); // 獲取接口引用
ti.show(); // 調用公共方法,實際執行 N.show()
}
}
N 不對外公開,客戶端無法直接實例化,只能通過 TestA 獲取接口引用。public 保證客戶端可調用,運行時動態綁定到 N.show()。N.show() 不加 public,編譯器報錯:attempting to assign weaker access privileges。Method.setAccessible(true) 可訪問非公共方法,但 public 方法無需特權即可調用。public。public。包私有類中的 public 方法並非無意義,它是實現公共契約(接口)的必要條件,支撐著面向接口編程、依賴倒置等核心設計原則。