IはクラスBとクラスBがクラスを継承継承クラスCを持っている場合、私はクラスCのオブジェクトを作成する場合、次に 、作成されたスーパークラスのオブジェクトであります??はいの場合、どのように? クラスAのプライベートメンバーにアクセスする方法 ??派生クラスのオブジェクトを作成するとスーパークラスのオブジェクトが作成されますか?
答えて
- はい、スーパークラスのオブジェクトが作成されます。
- スーパークラスのプライベートメンバーにアクセスすることはできません。そうでなければ、プライベートにすることはできません。あなたはスーパークラスのprotectedメソッドやpublicアクセサメソッドを持つことができ、private変数の値を返すことができます。または、リフレクションを使用してプライベート変数にアクセスできます。しかし、あなたはスーパークラスだけでなく、何でも使うことができます。
- いいえ - スーパークラスの別個のインスタンスが作成されません。ただし、スーパークラスへの参照が必要な場合は、派生クラスのインスタンスへの参照を使用できます。 "C is a B ..." –
申し訳ありません..質問を修正しました。 –
クラス外のプライベート変数にはアクセスできません。
それらにアクセスするには、
1.あなたは彼らがパブリックまたは保護されたことがありますが、それは良いアイデアではありません。
2.あなたが再びプライベートメソッドではありませんそのためのgetterメソッドを書くことができ、それは良いアプローチです。
3.アクセスには反射を使用することができます。
はあなたを助けるために多くの情報を提供し、より良い
申し訳ありません..質問を修正しました。 –
派生クラスのオブジェクトが作成されたときにスーパークラスのオブジェクトが作成されていますか?
号
スーパークラスコンストラクタはcurrebtオブジェクトのスーパークラス定義の状態を初期化するために使用されるが、これはスーパークラスのインスタンスを作成するに達するしません。
クラスBを継承し、クラスBがクラスAを継承する場合、クラスCのオブジェクトを作成すると、スーパークラスのオブジェクトが作成されますか?
番号上記を参照してください。
あなたがCのインスタンスを作成する場合は、あなたが最も派生型C.です。このオブジェクトはもがinstanceof
Bになる一つのオブジェクトを持つことになりますが、それが原因オーバーライドに、通常のBのように正確に動作しない場合がありますCやその他のもので。
はいの場合、どのように?
Moot。
クラスAのプライベートメンバーにアクセスするには?
サブクラスからスーパークラスのメンバーに直接アクセスすることはできません。これがアクセス修飾子の意味です。アクセスする必要がある場合は、それらを使用する必要があります。これを行うには、スーパークラスに非公開のメソッド(ゲッターやセッターなど)を作成するか、メンバーのアクセスを変更する必要があります。
(代わりに、private
アクセス修飾子をオーバーライドするためにリフレクションを使用することもできますが、最後の手段として使用する必要があります)スーパークラスコードを修正して必要なアクセスを提供する方がよいでしょう。サブクラスは全くアクセスする必要はありません)。
申し訳ありません。 –
使用している言語によって異なります。 C++を使用している場合は、サブクラスをスーパークラスの友人にすることができます。次に、そのパブリックメンバーにアクセスできます。 Javaを使用している場合は、リフレクションを使用してスーパーオブジェクトを特定し、それを反映させることができますが、それは価値があるよりも大きな問題になります。
何ですか?クラスCはクラスBを継承し、クラスCはクラスBを継承しますか?あなたは拡張を意味しないのですか? –
あなたは 'class A'の私的メンバーにアクセスすることはできません - それはあなたの継承のヒイラキには表示されません... – Nim
あなたの説明は少しです。親クラスのプライベートフィールドにアクセスしたい場合は、フィールドを 'protected'に変更するか、より良い方法でこれらのフィールドのアクセサを提供してください。 – user1329572