簡體   English   中英

Java中的間接子類無法訪問超類中的受保護成員

[英]Protected members in a superclass inaccessible by indirect subclass in Java

為什么在Java中,超類的受保護成員是不可被另一個包中的間接子類訪問的? 我知道不同包中的直接子類可以訪問超類的受保護成員。 我認為任何子類都可以訪問其繼承的受保護成員。

編輯

抱歉新手錯誤,子類可以訪問間接超類的受保護成員。

也許你有點困惑。

這是我的快速演示,並顯示了一個訪問受保護屬性的間接子類:

// A.java
package a;
public class A {
    protected int a;
}

// B.java 
package b;   //<-- intermediate subclass
import a.A;
public class B extends A {
}

// C.java
package c; //<-- different package 
import b.B;
public class C extends B  { // <-- C is an indirect sub class of A 
    void testIt(){
        a++;
        System.out.println( this.a );//<-- Inherited from class A
    }
    public static void main( String [] args ) {
        C c = new C();
        c.testIt();
    }
}

它打印1

如您所見,屬性a可從子類C訪問。

如果你向我們展示你正在嘗試的代碼,我們可以找出你的困惑在哪里。

也許問題是他試圖訪問其他實例的受保護字段而不是他的。 如:

package a;
public class A{
    protected int a;
}

package b;
public class B extends A{

}

package c;
public class C extends B{
    public void accessField(){
        A ancient = new A();
        ancient.a = 2;  //That wouldn't work.

        a = 2;   //That works.
    }


}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM