2016-08-25 18 views
1

私はプライベート変数が継承されないことを理解していますので、サブクラスでどのようにアクセスできますか?親クラスのプライベート変数にどのようにアクセスできますか?

すなわち

class A{ 
    private int i = 5; 
    // more code 
} 
class B extends A{ 
    public int toInt(){ 
     return super.i; 
    } 
} 
+5

:Javaで可能です

"この問題を回避するには、" リフレクションAPIを使用しています。あなたがそれらにアクセスしていれば彼らはプライベートではありません... –

+0

絶対にする必要がある場合は、getters/setters(public/protectedメソッド)をいつでも使用できます。しかし、私はあなたがそれを必要とする理由はありません。 – iMan

+0

ええ、問題は私がアクセス権を得なければならないことです。ありがとうございます。私は試してみます:) –

答えて

5

通常は、サブクラスは、フィールドを表示することができますどのiprotectedとしてマークすると思います。

もう1つの方法は、getスタイルの関数を書くことです。特に、サブクラスがフィールドに書き込まれないようにしたい場合は、この方が効果的です。 putスタイルの関数を書くことは、カプセル化を本当に破ってしまいます。

もまた、privateを迂回する別の方法を提供しますが、その方法を使用することはお勧めできません。

+0

Bathsに感謝します。私は "get"関数を実行します。 –

+0

カプセル化違反を制限するには、private修飾子を使用してsetを使用するか、noneを使用します。 – c0der

+0

@JustinMiddletonこれを公平にするための答えとしてマークしてください(問題が解決した場合はそのように見えます)。 –

3

一般的に、そうすることはできません。これが変数がprivateである理由です。

サブクラスがプライベートメンバーにアクセスできるように基本クラスを実装したい場合は、protectedアクセサメソッド(ゲッターまたはセッターのいずれか)を実装します。フィールドにはprotectedとマークすることもできますが、それを開始することはお勧めしません。非公開のフィールドを作るためには、真剣な理由が必要です。あなたがいない

Field f = A.class.getDeclaredField("i"); 
f.setAccessible(true); 
f.get(); 
関連する問題