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
。
試しているコードを見せていただければ、混乱の原因を突き止めることができます。
おそらく問題は、彼が他のインスタンスの保護されたフィールドにアクセスしようとしているが、彼のものではないことです。など:</p>
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.
}
}