私はプライベート変数が継承されないことを理解していますので、サブクラスでどのようにアクセスできますか?親クラスのプライベート変数にどのようにアクセスできますか?
すなわち
class A{
private int i = 5;
// more code
}
class B extends A{
public int toInt(){
return super.i;
}
}
私はプライベート変数が継承されないことを理解していますので、サブクラスでどのようにアクセスできますか?親クラスのプライベート変数にどのようにアクセスできますか?
すなわち
class A{
private int i = 5;
// more code
}
class B extends A{
public int toInt(){
return super.i;
}
}
通常は、サブクラスは、フィールドを表示することができますどのi
protected
としてマークすると思います。
もう1つの方法は、get
スタイルの関数を書くことです。特に、サブクラスがフィールドに書き込まれないようにしたい場合は、この方が効果的です。 put
スタイルの関数を書くことは、カプセル化を本当に破ってしまいます。
もまた、private
を迂回する別の方法を提供しますが、その方法を使用することはお勧めできません。
Bathsに感謝します。私は "get"関数を実行します。 –
カプセル化違反を制限するには、private修飾子を使用してsetを使用するか、noneを使用します。 – c0der
@JustinMiddletonこれを公平にするための答えとしてマークしてください(問題が解決した場合はそのように見えます)。 –
一般的に、そうすることはできません。これが変数がprivate
である理由です。
サブクラスがプライベートメンバーにアクセスできるように基本クラスを実装したい場合は、protected
アクセサメソッド(ゲッターまたはセッターのいずれか)を実装します。フィールドにはprotected
とマークすることもできますが、それを開始することはお勧めしません。非公開のフィールドを作るためには、真剣な理由が必要です。あなたがいない
Field f = A.class.getDeclaredField("i");
f.setAccessible(true);
f.get();
:Javaで可能です
"この問題を回避するには、" リフレクションAPIを使用しています。あなたがそれらにアクセスしていれば彼らはプライベートではありません... –
絶対にする必要がある場合は、getters/setters(public/protectedメソッド)をいつでも使用できます。しかし、私はあなたがそれを必要とする理由はありません。 – iMan
ええ、問題は私がアクセス権を得なければならないことです。ありがとうございます。私は試してみます:) –