Java では、特にフィールドを非表示にする場合、祖父母の状態変数にアクセスできることを知っています。
((Grandparent) this).hiddenField
メソッド呼び出しの場合と同じ理論的根拠が当てはまらないのはなぜですか? super.method() を呼び出すことができますが、他の先祖も同様に呼び出さないのはなぜですか?
Java では、特にフィールドを非表示にする場合、祖父母の状態変数にアクセスできることを知っています。
((Grandparent) this).hiddenField
メソッド呼び出しの場合と同じ理論的根拠が当てはまらないのはなぜですか? super.method() を呼び出すことができますが、他の先祖も同様に呼び出さないのはなぜですか?
メソッドは仮想ですが、フィールドは仮想ではないためです。目標は、参照の種類に関係なく同じメソッドを呼び出すことでした。
(Grandparent) this).method()
常に等しいthis.method()
。
インスタンスメソッドのフィールド隠蔽に類似するものはありません。インスタンス メソッドは、インスタンス フィールドや静的メソッドとは異なり、動的ディスパッチの対象となり、それはまったく別の話です。ある意味では、オーバーライドされたメソッドはもはや「そこ」になく、唯一の例外はオーバーライドするメソッド本体内にあり、直接オーバーライドされるメソッドだけがあります。