基於Java protected的深刻懂得。本站提示廣大學習愛好者:(基於Java protected的深刻懂得)文章只能為提供參考,不一定能成為您想要的結果。以下是基於Java protected的深刻懂得正文
一提到拜訪掌握符protected,即便是初學者普通都邑很自負的以為本身在這方面的懂得沒有成績。那好,我們提一個成績出來看看.....
請看上面兩頭代碼,個中包B中的貓和鼠都繼續了植物類。
//代碼1:包A中有一個植物類
package testa;
public class Animal {
protected void crowl(String c){
System.out.println(c);
}
}
//代碼2:包B中有兩個類——貓類和鼠類
package testb;
import testa.Animal;
class Cat extends Animal{
}
class Rat extends Animal{
public void crowl(){
crowl("zhi zhi"); //沒有成績,繼續了Animal中的protected辦法——crowl(String)
Cat cat=new Cat();
cat.crowl("miao miao"); //wrong, The method crowl(String) from the type Animal is not visible
}
}
既然,貓和鼠都繼續了植物類,那末在鼠類的感化規模內,看不到貓所繼續的crowl()辦法呢?
關鍵地點:
protected受拜訪掩護規矩是很奧妙的。固然protected域對一切子類都可見。然則有一點很主要,子類只能在本身的感化規模內拜訪本身繼續的誰人父類protected域,而沒法到拜訪其余子類(同父類的親兄弟)所繼續的protected域。 說白了就是:老鼠只能叫"zhi,zhi"。即便他能看見貓(可以在本身的感化域內創立一個cat對象),也永久沒法學會貓叫。
也就是說,cat所繼續的crowl辦法在cat類感化規模內可見。但在rat類感化規模內弗成見,即便rat,cat是親兄弟也不可。
別的:這就是為何我們在用clone辦法的時刻不克不及簡略的直接將對象aObject.clone()出來的緣由了。
總之,當B extends A的時刻,在子類B的感化規模內,只能挪用簿子類B界說的對象的protected辦法(該辦法從父類A中繼續而來)。而不克不及挪用其他A類對象的protected 辦法