質問: 現在JavaGoldの勉強をしています。 変数のオーバーライドについて教えてください。 以下リンクの7番の問題で変数に対してthisとsuperで呼び出しています。解答はCでどちらも同じ値が返ってくるのですが、この動きを理解したいです。 https://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=303&p_certName=SQ1Z0_803&p_org_id=70&lang=JA オーバーライドすることによりスーパークラスの変数typeはどう扱われるのでしょうか? サブクラスとスーパークラスの両方に同じ変数を持つ(継承される)という状態になり、thisキーワードで呼び出した変数typeは自オブジェクト(サブクラス)の変数type、superキーワードで呼び出した変数typeはサブクラスの変数typeの値が出力されるという解釈で合っていますでしょうか? ご指導ご鞭撻のほどよろしくお願い致します。
回答: サブクラスの`Cougar`の方にフィールド`type`の定義が**ありません**ので、**オーバーライドされていません**。 `Cougar`内から`type`にアクセスしても、親クラスの`Feline`で定義された`type`フィールドにアクセスされます。もちろん、`this.`でも`super.`でも同じものです。 一方で、`Cougar`側で`type`を定義した場合には、スーパークラスの変数は隠蔽されてしまいますので、`super.type`のようにして明示的に呼ぶ必要が出てきます(もっとも、明確な理由がない限りやるべきではないと思います)。