@Ringomm

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

JavaSilver 黒本12章22 親の親クラスとsuperについて

IMG_5229.jpeg
IMG_5231.jpeg
IMG_5232.jpeg

解決したいこと

表題の問題につきまして、解説のアクセス修飾子の部分については理解できます。
※問題画像:1枚目、解説:画像1・2枚目

CクラスがAクラスのサブクラスというのもわかります。

ただBクラスのサブクラス、つまりCクラスから見ると親の親クラスにあたるAクラスのフィールドには
superではアクセスできない認識なのですが、(superでアクセスできるのは1つ上の親クラスだけでは?)
なぜ答えが「A. BクラスのサブクラスではgetValueメソッドでAクラスのフィールドにアクセスできる」となるのでしょうか?

ご解説よろしくお願いいたします。

0 likes

3Answer

Comments

  1. @Ringomm

    Questioner

    端的でわかりやすかったです。super.superが誤答の問題の解説に「サブクラスからアクセスできるのは1つ上のスーパークラスだけ」という記述があったので混乱しておりました。ありがとうございました。

super経由ではなく、以下のようにAにキャストするとアクセスできます。

public class C extends B {
  @Override
  public double getValue() {
    System.out.println(((A)this).num);
    return super.getValue();
  }
}

numprivateの場合はコンパイルエラーになります。

1Like

自分のクラスにないメンバやメソッドは、親クラスを順に辿ってObjectクラスに辿りつくまで探します。
super()を指定しない場合、自分のクラスから探し始めます。自分のクラスになければ親クラスを辿ります。親クラスにもなければさらに親の親クラスを辿ります。
super()を指定した場合、親のクラスから探し始めます。親のクラスになければさらに親のクラスを辿ります。

1Like

Your answer might help someone💌