次のクラス構造を想定します。
名前空間 a の内部
public abstract class A {
protected int someVal;
protected abstract int action();
}
名前空間 ab で
public class B extends A{
//magically filled with elements ;)
List<A> elements;
protected int action(){
someVal = 42; // OK
int l = 0;
for (A a : elements){
l+= a.action(); //FORBIDDEN!!
}
return l;
}
}
だからEclipseは私に提案します
「アクション」の可視性を「保護」に変更します
なんかだまされた気がする。
アクションの実装は許可されているのに、呼び出しは許可されていないのはなぜですか? アクセスも問題ありませんsomeVal
。
私はB
同じ名前空間にコピーすることをよく知っていますが、B または類似の C や D などを拡張する多くのクラスがあり、それらを順番に配置したいと考えています。
または、私の質問を言い換えると: このパケットは、クラスに保護されたメソッドを強制する唯一の方法ですが、それをクライアント コードから非表示にしますか?