跨套件驗證三種存取修飾符對方法可見性的影響:public 任意可見、protected 同套件+子類可見、private 僅類內部可見。
// e8.com.ClassDemo1
public class ClassDemo1 {
public void method1() { ... } // 任何類可呼叫
protected void method2() { ... } // 同套件或子類可呼叫
private void method3() { ... } // 僅本類可呼叫
}
// e8.com.ClassDemo2 (同套件)
public class ClassDemo2 {
public static void main(String[] args) {
ClassDemo1 d = new ClassDemo1();
d.method1(); d.method2(); d.method3(); // 全部通過編譯
}
}
// e8.net.ClassDemo3 (不同套件,非子類)
import e8.com.*;
public class ClassDemo3 {
public static void main(String[] args) {
ClassDemo1 d = new ClassDemo1();
d.method1(); // OK
d.method2(); // 編譯錯誤:protected 不可見
d.method3(); // 編譯錯誤:private 不可見
}
}
| 修飾符 | 同類 | 同套件 | 子類(異套件) | 非子類(異套件) |
|---|---|---|---|---|
| public | ✓ | ✓ | ✓ | ✓ |
| protected | ✓ | ✓ | ✓ | ✗ |
| default(無) | ✓ | ✓ | ✗ | ✗ |
| private | ✓ | ✗ | ✗ | ✗ |