- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Javaでのメンバー変数へのアクセスの仕組み)
Javaでのメンバー変数へのアクセスの仕組み
このQ&Aのポイント
- Javaでのメンバー変数へのアクセスの仕組みについて質問です。
- jythonの例では問題なく動作するが、同じようにJavaで書くとエラーが発生する場合、Javaで同様のことを実現する方法はあるのか。
- Javaの経験が浅く、メンバー変数へのアクセスについて理解が不足しているため、教えていただきたい。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
PythonとJavaの型システムに対する考え方の違いが原因です。 Javaでは、bar.hogeという式の型はHogeです。Hogeにはm1というメンバーが存在しないので当然コンパイルエラーになります。 コンパイル時にbar.hogeという式の型から判断するので、実行時にはbar.hogeにFooのインスタンスが代入されているなんてことは考慮しません。 bar.hogeに代入されているのがFooのインスタンスだと分かっているのなら、((Foo)(bar.hoge)).m1のようにキャストしてやればお望みの動作になると思います。
お礼
なるほど、大変よくわかりました。ありがとうございます。Javaの型システムをもう少しきちんと整理してみようと思います。