継承 (複数、仮想など) が存在する場合に C++ が仮想テーブルを管理する方法と、オブジェクトをメモリに配置する方法について多くのことを学びました。
現在、Java は単一行の継承のみを考慮する必要があり、インスタンス メソッドの非表示などは必要ないため、この場合、仮想テーブルは少し単純になるはずです。私は、Class
ファイルがメソッド領域への「ゲートウェイ」として機能することを知っています。ここには、メソッドのバイトコードを含む型定義が格納されていると思います。次の 2 つの質問が頭に浮かびます。
- 一般にJavaにはvtable/methodテーブル構造がありますか? どのように保存され、
Class
オブジェクトにリンクされますか? - 継承/動的メソッド呼び出しはどのように解決されますか? つまり、次のとおりです。
次のクラスとインスタンス化があります。
class A{ int f(){...} }
class B extends A{ int f(){...} }
A a = new B();
a.f();
B の f() が呼び出されます。B のファイルを解決する AClass
は正しいメソッド ポインターですか?
コメントをお寄せいただきありがとうございます。