java - 同じ名前のメンバー変数が多態的に呼び出される場合、親クラスのメンバー変数にアクセスされるのはなぜですか?
女神的闺蜜爱上我
女神的闺蜜爱上我 2017-06-12 09:27:03
0
2
934

親クラスとサブクラスのメンバ変数がそれぞれヒープに格納されているので、親クラスが存在するため、親クラスのメンバ変数が先に見つかるのではないかと勝手に推測しました。次にテストしました。コードは次のとおりです:

リーリー

出力は次のとおりです:
Z:test.Z@15db9742
Z:5
f:test.Z@15db9742
f:10

f と this は同じオブジェクトを指し、同じ変数にアクセスしますが、結果が異なるため、上記の私の推測は間違っているはずです。では、親クラスのメンバー変数にアクセスするために、同じ名前のメンバー変数への多態性呼び出しが行われる原因は一体何でしょうか?

女神的闺蜜爱上我
女神的闺蜜爱上我

全員に返信(2)
Ty80

f はサブクラス オブジェクトを参照します。メソッドの書き換えとオーバーロードについては聞いたことがあるだけですが、クラス変数については知りませんでした。メソッドが呼び出される場合、それは実際のオブジェクトを指すことになります(ここでの実際のオブジェクトはサブクラスのメソッドです)。オブジェクト Z) は、クラス変数が同じ名前を持つ場合、生きているオブジェクトのクラス変数値です。

いいねを押す +0
扔个三星炸死你

Java におけるメソッドの書き換え、オーバーロード、および動的リンクは、同じものの異なる表現であるポリモーフィズムを構成します。

あなたの例は、メソッドの書き換えによって実証されたポリモーフィズムです。

宣言されているのは親クラス F で、実際にはそのサブクラス Z を指します。Z も F から継承されているため、Z は上方変換できることになります。

ここでは f 変数は Z によってインスタンス化されていますが、これは F 型であり、F の特性を示しています。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート