私たちのクラスfoo
にプライベートインスタンス変数bar
があるとします。子クラスからの親のプライベートインスタンス変数へのアクセス?
baz
extends foo
という別のクラスを用意しましょう。 foo
で定義されたアクセッサメソッドがない場合、baz
の非静的メソッドをfoo
の変数bar
にできますか?
私はJavaで作業しています。
私たちのクラスfoo
にプライベートインスタンス変数bar
があるとします。子クラスからの親のプライベートインスタンス変数へのアクセス?
baz
extends foo
という別のクラスを用意しましょう。 foo
で定義されたアクセッサメソッドがない場合、baz
の非静的メソッドをfoo
の変数bar
にできますか?
私はJavaで作業しています。
いいえ、-IS:
6.6.8例:プライベートフィールド、メソッド、およびコンストラクタ
プライベート クラスメンバまたはコンストラクタ は、 トップレベルクラス(§7.6)の本文内でアクセス可能であり、 のメンバー宣言または コンストラクタを囲んでいます。 サブクラスによって継承されません。
しかし、関係なく、この言語制限の、あなたはaccess private fields through reflectionことができます。
Field privateStringField =
MyClass.class.getDeclaredField("privateString");
privateStringField.setAccessible(true);
String fieldValue = (String) privateStringField.get(privateObject);
System.out.println("fieldValue = " + fieldValue);
子クラスは(プライベートアクセス制御の全体のポイントです)プライベートメンバーにアクセスすることはできません使用する必要があります。これらはサブクラスが自分の親から継承し、したがって、見変数であるため、http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html
基本的にあなたがfooで宣言されるパブリックまたは保護された変数をしたい:ここにウェブサイト上で見つけるのテーブルがあり、このような質問については、
バズで。
... fooでアクセサーメソッドが定義されていない場合は?
アクセサーが必要です。また、継承を世話してください、varは本当に親にあるべきですか?覚えておいてくださいjava language specification, 3rd editionによらないチェック...
あなたは下位クラスでプライベート変数にアクセスすることはできません。通常は、このために "protected"または "package"(デフォルト)レベルのアクセスを使用したいと考えています。しかし、あなたが本当にトリッキーになりたい場合は、反射とAccessibleObjectを使うことに頼ることができます。 あなたが本当にバインドしていない限り、プロダクションコードのためにこれを行うことはお勧めできません。テストなどのために、それはいいです。
サブクラスでスーパークラスのプライベート変数を使用するには、アクセサメソッドが必要です。 これ以外の場合は、privateの代わりにprotected修飾子を使用します。
クラスのプライベート変数は、常にそのクラスのスコープを持ちます。サブクラス間で共有する必要がある場合は、「protected」と宣言する必要があります。
useはインスタンス変数で保護することができます –