3

Java では、スーパークラスの保護されたメンバーが別のパッケージの間接サブクラスからアクセスできないのはなぜですか? 別のパッケージの直接のサブクラスがスーパークラスの保護されたメンバーにアクセスできることを知っています。どのサブクラスでも、継承された保護されたメンバーにアクセスできると思いました。

編集

初歩的なミスで申し訳ありませんが、サブクラスは間接的なスーパークラスの保護されたメンバーにアクセスできます。

4

2 に答える 2

12

おそらく、あなたは少し混乱しています。

これが私の簡単なデモで、保護された属性にアクセスする間接サブクラスを示しています。

// 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

試しているコードを見せていただければ、混乱の原因を突き止めることができます。

于 2010-05-12T16:18:38.173 に答える
0

おそらく問題は、彼が他のインスタンスの保護されたフィールドにアクセスしようとしているが、彼のものではないことです。など:</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.
    }


}
于 2012-09-27T03:11:43.913 に答える