2013-03-24 28 views
0

在Java中,如何訪問不同包中的受保護成員?來自diff包的java保護成員訪問

package p1 
    class base  
     protected int x 

package p2 
    import p1.* 
    class derived extends base 
     int x 

class subderived extends derived 
    int x 

subderived主要我想訪問的p1.basex爲受保護的規範,我們只能使用繼承我們不能用引用來訪問basex。要訪問derivedx我們可以使用super.x,但從subderived,我們如何訪問base.x

回答

2

protected成員立即從派生和子派生類訪問,沒有任何修飾詞:而不是寫

base.x = 123; 

你可以寫

x = 123; 

它將編譯罰款,只要它是派生類的一種方法。但是,爲了使其發揮作用,您需要從派生類本身刪除具有相同名稱的成員:否則,基本成員是隱藏的,並且無法通過正常語法通過多個級別的繼承層次結構訪問的語言,即不使用反射

+1

但不是'derived.x' [hiding](http://docs.oracle.com/javase/tutorial/java/IandI/hidevariables.html)'base.x'? – wchargin 2013-03-24 20:01:07

+0

@WChargin你是對的,我錯過了隱藏'x'的派生類中有'x'的事實。我懷疑那個其他'x'是故意放在那裏的,所以我更新了答案以反映這一點。謝謝! – dasblinkenlight 2013-03-24 20:12:01

+0

**非常感謝** – 2013-03-26 08:37:36