0

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

4

4 に答える 4

1

派生クラスのオブジェクトを作成すると、スーパークラスのオブジェクトは作成されますか?

いいえ。

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

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

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

C のインスタンスを作成すると、最も派生した型が C であるオブジェクトが 1 つ作成されます。このオブジェクトB になりinstanceofますが、C でのメソッドのオーバーライドなどにより、通常の B とまったく同じように動作しない場合があります。

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

駄目だ。

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

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

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

于 2012-04-30T12:15:03.103 に答える
0
  1. はい、スーパークラスのオブジェクトが作成されます。
  2. スーパークラスのプライベートメンバーにアクセスすることはできません。そうしないと、プライベートメンバーになりません。スーパークラスにプロテクトメソッドまたはパブリックアクセサーメソッドを含めることができ、プライベート変数の値を返すことができます。または、リフレクションを使用してプライベート変数にアクセスできます。しかし、それはスーパークラスだけでなく、何にでも使用できます。
于 2012-04-30T11:57:50.497 に答える
0

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

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

1.それらを公開または保護することはできますが、それは良い考えではありません。

2.これもプライベートメソッドではないゲッターメソッドを書くことができますが、これは良いアプローチです。

3. リフレクションを使用してアクセスできます。

より良い情報を提供する

于 2012-04-30T12:06:47.573 に答える
0

使用している言語によって異なります。C++ を使用している場合は、サブクラスをスーパークラスのフレンドにすることができ、そのパブリック メンバーにアクセスできます。Java を使用している場合は、リフレクションを使用してスーパー オブジェクトを見つけてそれを反映することができますが、それは価値があるよりも面倒です。

于 2012-04-30T14:36:08.890 に答える