[英]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.