修飾子Modifier是用來控制class在不同的class與package之間的關係
一般來說很容易搞混是因為大家都只是記憶表格而表格內容又無法完全解釋其對應複雜關係
從Package的角度再切到繼承的角度上會比較好瞭解
最外層class
public 可以跨package
no modifier 不可以跨package
protected 不可使用
private 不可使用
內部成員
public 同package可直接用, 不同package也可用
no modifier 同package可直接用, 不同package則不行
protected 同package可直接用, 不同package則不行
private 只有自己的class可用, 同package或不同package都不行
其中, 同class內的內部class設定private也可以直接存取
ex:
public class Top {
public class inclass{
private int s;
}
public static void main(String[] args) {
int a = new Top().new inclass().s = 10;
}
}
繼承時
public 可以被繼承, 同package可直接用, 不同package也可用
no modifier 同package可繼承和使用, 不同package則不行
protected 可以被繼承, 同package可直接用, 不同package則不行
private 會被繼承, 只有自己的class可用, 同package或不同package都不行直接存取
, 子class可以透過父類別提供的方法來存取
1. 官網https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html