親クラスとサブクラスのメンバ変数がそれぞれヒープに格納されているので、親クラスが存在するため、親クラスのメンバ変数が先に見つかるのではないかと勝手に推測しました。次にテストしました。コードは次のとおりです:
リーリー出力は次のとおりです:
Z:test.Z@15db9742
Z:5
f:test.Z@15db9742
f:10
f と this は同じオブジェクトを指し、同じ変数にアクセスしますが、結果が異なるため、上記の私の推測は間違っているはずです。では、親クラスのメンバー変数にアクセスするために、同じ名前のメンバー変数への多態性呼び出しが行われる原因は一体何でしょうか?
f はサブクラス オブジェクトを参照します。メソッドの書き換えとオーバーロードについては聞いたことがあるだけですが、クラス変数については知りませんでした。メソッドが呼び出される場合、それは実際のオブジェクトを指すことになります(ここでの実際のオブジェクトはサブクラスのメソッドです)。オブジェクト Z) は、クラス変数が同じ名前を持つ場合、生きているオブジェクトのクラス変数値です。
Java におけるメソッドの書き換え、オーバーロード、および動的リンクは、同じものの異なる表現であるポリモーフィズムを構成します。
あなたの例は、メソッドの書き換えによって実証されたポリモーフィズムです。
宣言されているのは親クラス F で、実際にはそのサブクラス Z を指します。Z も F から継承されているため、Z は上方変換できることになります。
ここでは f 変数は Z によってインスタンス化されていますが、これは F 型であり、F の特性を示しています。