java只有四種訪問控制權限:private、default、protected、public
private:當前類訪問權限
default:包訪問權限
protected:子類訪問權限
public:公共訪問權限
外部類為什么不能使用protected、private修飾:
1.不能用private:
對於一個外部類,用private修飾是沒有意義的。因為如果使用private修飾外部類,其它類就不能訪問的這個類,那么這個類就不能創建實例,這個類的屬性和方法就不能被外界訪問,所以沒有意義。
2.不能用protected:
protected是用來修飾類中的屬性和方法的,不是用來修飾類的。假如定義一個A類用protected修飾,再在與A類不同包的另一個保重定義一個B類,B類如果要繼承A類,前提是B類能夠訪問到A類。仔細想想就會發現這是沖突的。(你要成為A類的子類,你的先訪問到A類,但你要訪問到A類,那你先得成為A類的子類。因為protected修飾的類就是給子類訪問的)這個邏輯明顯是沖突的。
所以不僅是外部類,普通類也不能用protected修飾。
這時肯定有人會說:把B類放在A類同一個包下,那B類不就可以訪問到A類了嗎?
但是:如果你把B類放在和A類同一個包下,那和用default修飾A類有什么區別,既然和default沒有區別,那干嘛還要用protected修飾A類,而且protected本身可以跳出同一個包訪問的意義也不存在了,所以用protected修飾類是沒有意義的。