0

Java では、特にフィールドを非表示にする場合、祖父母の状態変数にアクセスできることを知っています。

((Grandparent) this).hiddenField

メソッド呼び出しの場合と同じ理論的根拠が当てはまらないのはなぜですか? super.method() を呼び出すことができますが、他の先祖も同様に呼び出さないのはなぜですか?

4

2 に答える 2

1

メソッドは仮想ですが、フィールドは仮想ではないためです。目標は、参照の種類に関係なく同じメソッドを呼び出すことでした。

(Grandparent) this).method()常に等しいthis.method()

于 2012-04-14T15:40:10.160 に答える
1

インスタンスメソッドのフィールド隠蔽に類似するものはありません。インスタンス メソッドは、インスタンス フィールドや静的メソッドとは異なり、動的ディスパッチの対象となり、それはまったく別の話です。ある意味では、オーバーライドされたメソッドはもはや「そこ」になく、唯一の例外はオーバーライドするメソッド本体内にあり、直接オーバーライドされるメソッドだけがあります。

于 2012-04-14T15:41:23.640 に答える