首頁  >  文章  >  Java  >  實例詳解java中的protected關鍵字

實例詳解java中的protected關鍵字

王林
王林轉載
2020-06-02 16:52:402716瀏覽

實例詳解java中的protected關鍵字

首先我們來看看如下兩個範例:

範例一:

//包A中有一个动物类  
package testa;  
public class Animal {  
    protected void crowl(String c){  
        System.out.println(c);  
    }  
}

(影片教學推薦:java影片

範例二:

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入門程式

以上是實例詳解java中的protected關鍵字的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除