2012-04-30 8 views
0

IはクラスBクラスBクラスを継承継承クラスCを持っている場合、私はクラスCのオブジェクトを作成する場合、次に 、作成されたスーパークラスのオブジェクトであります??はいの場合、どのように? クラスAのプライベートメンバーにアクセスする方法 ??派生クラスのオブジェクトを作成するとスーパークラスのオブジェクトが作成されますか?

+2

何ですか?クラスCはクラスBを継承し、クラスCはクラスBを継承しますか?あなたは拡張を意味しないのですか? –

+0

あなたは 'class A'の私的メンバーにアクセスすることはできません - それはあなたの継承のヒイラキには表示されません... – Nim

+3

あなたの説明は少しです。親クラスのプライベートフィールドにアクセスしたい場合は、フィールドを 'protected'に変更するか、より良い方法でこれらのフィールドのアクセサを提供してください。 – user1329572

答えて

0
  1. はい、スーパークラスのオブジェクトが作成されます。
  2. スーパークラスのプライベートメンバーにアクセスすることはできません。そうでなければ、プライベートにすることはできません。あなたはスーパークラスのprotectedメソッドやpublicアクセサメソッドを持つことができ、private変数の値を返すことができます。または、リフレクションを使用してプライベート変数にアクセスできます。しかし、あなたはスーパークラスだけでなく、何でも使うことができます。
+0

- いいえ - スーパークラスの別個のインスタンスが作成されません。ただし、スーパークラスへの参照が必要な場合は、派生クラスのインスタンスへの参照を使用できます。 "C is a B ..." –

+0

申し訳ありません..質問を修正しました。 –

0

クラス外のプライベート変数にはアクセスできません。

それらにアクセスするには、

1.あなたは彼らがパブリックまたは保護されたことがありますが、それは良いアイデアではありません。

2.あなたが再びプライベートメソッドではありませんそのためのgetterメソッドを書くことができ、それは良いアプローチです。

3.アクセスには反射を使用することができます。

はあなたを助けるために多くの情報を提供し、より良い

+0

申し訳ありません..質問を修正しました。 –

1

派生クラスのオブジェクトが作成されたときにスーパークラスのオブジェクトが作成されていますか?

スーパークラスコンストラクタはcurrebtオブジェクトのスーパークラス定義の状態を初期化するために使用されるが、これはスーパークラスのインスタンスを作成するに達するしません。

クラスBを継承し、クラスBがクラスAを継承する場合、クラスCのオブジェクトを作成すると、スーパークラスのオブジェクトが作成されますか?

番号上記を参照してください。

あなたがCのインスタンスを作成する場合は、あなたが最も派生型C.です。このオブジェクトはinstanceof Bになる一つのオブジェクトを持つことになりますが、それが原因オーバーライドに、通常のBのように正確に動作しない場合がありますCやその他のもので。

はいの場合、どのように?

Moot。

クラスAのプライベートメンバーにアクセスするには?

サブクラスからスーパークラスのメンバーに直接アクセスすることはできません。これがアクセス修飾子の意味です。アクセスする必要がある場合は、それらを使用する必要があります。これを行うには、スーパークラスに非公開のメソッド(ゲッターやセッターなど)を作成するか、メンバーのアクセスを変更する必要があります。

(代わりに、privateアクセス修飾子をオーバーライドするためにリフレクションを使用することもできますが、最後の手段として使用する必要があります)スーパークラスコードを修正して必要なアクセスを提供する方がよいでしょう。サブクラスは全くアクセスする必要はありません)。

+0

申し訳ありません。 –

0

使用している言語によって異なります。 C++を使用している場合は、サブクラスをスーパークラスの友人にすることができます。次に、そのパブリックメンバーにアクセスできます。 Javaを使用している場合は、リフレクションを使用してスーパーオブジェクトを特定し、それを反映させることができますが、それは価値があるよりも大きな問題になります。