Java的Protected修飾符
Protected欄位是為了繼承而設計的.首先,一般的欄位由於封裝性,一般設定成private,但如果有新類繼承當前欄位所屬的類,就要修改當前欄位的訪問控制權限.
如果子類和父類在同一個package中,只需要將private去掉,許可權變為包訪問許可權即可;但是如果子類和父類不在同一個包內,為了能夠讓繼承實現,必須把private改成public.對於類庫和客戶端程式而言,他們大多不在一個包內,為了能夠讓子類訪問而改成public,這樣使得其他不相關的類也能訪問該成員(或方法),增加了風險.
所以設計了protected欄位,他介於public和包訪問許可權之間.在跨包訪問的過程中做了一個條件限定:包許可權 + 只能讓跨包的子類訪問 (public許可權 - 非子類跨包訪問)
非常要注意的是,protected許可權中的子類可訪問指的是:在子類中可以通過子類物件直接訪問繼承來的父類的protected物件,但是不能通過父類物件訪問該protected物件。同時,
在第三個類(不與子類、父類在同一個包)中,同過子類物件訪問父類的protected成員或者方法,不行(只能在子類中)
Eg:
Package nima
Public class TTG{
Private int meme;
Private int gg;
Public static void main(String[] args){
Element Ele = new Element(1,2);
Ele.clone();
}
}
Class Element{
Int id;
Int value;
Public Element(int id, int value){
This.id = id;
This.value = value;
}
}
可以發現,子類Element從父類Object繼承來的protected方法,只能在Element中訪問,而在第三方類TTG中,不能通過其物件訪問