2

クラス Avo のパッケージ ger1 に、保護された修飾子を持つインスタンス変数があります。

package ger1;  

public class Avo {  
    protected int i = 1;  
}

次に、パッケージger2にあるクラスPaiがあり、Avoを拡張し、インスタンスごとに変数にアクセスします。これまでのところ、通常...

package ger2;  

public class Pai extends Avo {  
    public Pai() {  
        i++  
    }  
}  

しかし、Kathy Sierra の本は、保護されたメンバーについて次のように述べています。サブクラス」。

しかし、クラス Pai のインスタンスを介してメンバーにアクセスしようとすると、許可されます! ただし、Filho クラスは Avo の同じパッケージに含まれている必要があります。なぜこれ?それは正常ですか?

package ger1;  

import ger2.Pai;  

public class Filho {  
    public Filho() {  
        Pai pai = new Pai();  
        pai.i++;  
    }  
} 
4

2 に答える 2

0

への呼び出しpai.i++;ger1パッケージで行われます。

保護されたint値はger1パッケージで宣言されています。つまり、上記と同じです。

したがって、同じパッケージに存在するすべてのクラスが値にアクセスできるiため、到達可能です。protected

キャシー・シエラの本が書いたケースを予想するには、クラスをパッケージからパッケージに移動するだけです。Filhoger1ger2

あなたがi到達できないように見えたことに気付くように:)

于 2012-09-28T12:44:01.680 に答える
0

これは予期される動作です。「保護されている」とは、サブクラスが別のパッケージにある場合でも、サブクラスで表示されることを意味します。

編集:この質問も参照してください Javaでは、デフォルト、パブリック、保護、およびプライベートの違い

于 2012-08-31T00:37:50.483 に答える