クラス Bを継承するクラスCがあり、クラス Bがクラス Aを継承する場合、クラス Cのオブジェクトを作成すると、スーパークラスのオブジェクトが作成されますか?? はいの場合、どのように?? クラスAのプライベートメンバーにアクセスする方法??
4 に答える
派生クラスのオブジェクトを作成すると、スーパークラスのオブジェクトは作成されますか?
いいえ。
スーパークラス コンストラクターは、スーパークラスで定義された currebt オブジェクトの状態を初期化するために使用されますが、これはスーパークラスのインスタンスを作成することにはなりません。
クラス B を継承するクラス C があり、クラス A を継承するクラス B がある場合、クラス C のオブジェクトを作成すると、スーパークラスのオブジェクトが作成されますか??
いいえ。上記を参照してください。
C のインスタンスを作成すると、最も派生した型が C であるオブジェクトが 1 つ作成されます。このオブジェクトもB になりinstanceof
ますが、C でのメソッドのオーバーライドなどにより、通常の B とまったく同じように動作しない場合があります。
はいの場合、どのように??
駄目だ。
クラスAのプライベートメンバーにアクセスするには??
private
サブクラスからスーパークラスのメンバーに直接アクセスすることはできません。それがprivate
アクセス修飾子の意味です。それらにアクセスする必要がある場合は、それらを使用する必要があります。これを行うには、スーパークラスで非プライベート メソッドを作成するか (getter や setter など)、メンバーのアクセスを変更する必要があります。
(代わりに、リフレクションを使用してprivate
アクセス修飾子をオーバーライドすることもできますが、これは最後の手段としてのみ使用する必要があります。必要なアクセスを提供するようにスーパークラス コードを修正するか、サブクラスが提供していないことを把握することをお勧めします。アクセスが必要です。)
- はい、スーパークラスのオブジェクトが作成されます。
- スーパークラスのプライベートメンバーにアクセスすることはできません。そうしないと、プライベートメンバーになりません。スーパークラスにプロテクトメソッドまたはパブリックアクセサーメソッドを含めることができ、プライベート変数の値を返すことができます。または、リフレクションを使用してプライベート変数にアクセスできます。しかし、それはスーパークラスだけでなく、何にでも使用できます。
クラス外のプライベート変数にアクセスすることはできません。
それらにアクセスするには、
1.それらを公開または保護することはできますが、それは良い考えではありません。
2.これもプライベートメソッドではないゲッターメソッドを書くことができますが、これは良いアプローチです。
3. リフレクションを使用してアクセスできます。
より良い情報を提供する
使用している言語によって異なります。C++ を使用している場合は、サブクラスをスーパークラスのフレンドにすることができ、そのパブリック メンバーにアクセスできます。Java を使用している場合は、リフレクションを使用してスーパー オブジェクトを見つけてそれを反映することができますが、それは価値があるよりも面倒です。