您好,登錄后才能下訂單哦!
這篇文章運用了實例代碼展示java中protected關鍵字的用法,代碼非常詳細,可供感興趣的小伙伴們參考借鑒,希望對大家有所幫助。
首先我們來看一下如下兩個示例:
示例一:
//包A中有一個動物類 package testa; public class Animal { protected void crowl(String c){ System.out.println(c); } }
示例二:
package testb; import testa.Animal; class Cat extends Animal { } public class Rat extends Animal{ public void crowl(){ this.crowl("zhi zhi"); //沒有問題,繼承了Animal中的protected方法——crowl(String) Animal ani=new Animal(); ani.crowl("animail jiaojiao"); //wrong, The method crowl(String) from the type Animal is not visible 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域和父類對象的protected域ani.crow1()。 說白了就是:老鼠只能叫"zhi,zhi"。即使他能看見貓(可以在自己的作用域內創建一個cat對象),也永遠無法學會貓叫。
也就是說,cat所繼承的crowl方法在cat類作用范圍內可見。但在rat類作用范圍內不可見,即使rat,cat是親兄弟也不行。
另外: 這就是為什么我們在用clone方法的時候不能簡單的直接將對象aObject.clone()出來的原因了。而需要在aObject.bObject=(Bobject)this.bObject.clone();
總結:
當B extends A的時候,在子類B的作用范圍內,只能調用本子類B定義的對象的protected方法(該方法從父類A中繼承而來)。而不能調用其他A類(A 本身和從A繼承)對象的protected方法。
看完上述內容,你們對java中的protected關鍵字有進一步的了解嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。