2014-03-13 124 views
1
  • 我有以下Foo類,它具有主要方法。
  • Foo擴展了Nee。
  • Foo類在com.package1中,Nee類在com.package2中。
  • 問題是我不能通過它的對象從Foo 類訪問Nee的受保護方法。這是爲什麼?(這裏的理論認爲,保護成員可以通過子類或類在同一個包內訪問)

Foo類看起來像下面,Java - 受保護的方法不能從子類訪問

package com.package1; 

import com.package2.Nee; 

/** 
    * 
    * @author Dilukshan Mahendra 
    */ 
public class Foo extends Nee{ 

    public static void main(String[] args) { 
     Nee mynee = new Nee(); 
     /* mynee.sayProtected(); This gives me a compile error, 
           sayProtected() has protected 
           access in com.package2.Nee 
     */ 
    } 

} 

東東類是像下面,

package com.package2; 

/** 
* 
* @author Dilukshan Mahendra 
*/ 
public class Nee { 



    protected void sayProtected(){ 

     System.out.println("I'm a protected method in Nee!"); 

    } 



} 
+0

你正試圖從另一個包中訪問。 – AloneInTheDark

+0

受保護的成員只能通過子類對象在包或子類中訪問。在不同的包中,你不能通過超級類對象訪問受保護的成員 – Braj

+1

@AloneInTheDark是的,但它是Nee的一個子類,它理論上說你可以訪問同一包中的一個受保護的成員或包之外的子類 –

回答

3

由於類com.package1.Foo和類com.package2.Nee是在兩個不同的包中,所以Nee類實例將不允許您調用該類的受保護方法。

創建實例Foo,它是Nee的子類,然後調用受保護的方法。

Foo foo = new Foo(); 
foo.sayProtected() 
+0

你可能意思是「com.package1.Foo和class com.package1.Nee」? – zEro

+2

糟糕!事實上,你可能會說「com.package1.Foo和class com.package2.Nee」,對吧? – zEro

+2

感謝您的更新@naimdjon :)。 –

0

成員可以被相同包中的子類或類訪問。 您正在使用兩種不同的軟件包。

0

受保護的允許訪問構件子類的。在此處,當您嘗試訪問Nee的受保護成員時,只有受保護的成員才能訪問Foo

1

如果你清楚受保護的成員不能在沒有子類的情況下訪問外部包,那麼無論你在哪裏創建Nee類對象來訪問其受保護的方法,無論是在其子類還是其他任何地方。同樣的事情。只有子類知道受保護的成員,並且可以通過子類對象訪問。

相關問題