Я многое узнал о том, как C++ управляет своими виртуальными таблицами при наличии наследования (множественного, виртуального и т. д.) и как он размещает объекты в памяти.
Теперь Java нужно беспокоиться только об одной строке наследования, не скрывать метод экземпляра и т. д., поэтому виртуальные таблицы в этом случае должны быть немного проще. Я знаю, что файлы Class
действуют как «шлюзы» в область методов, где хранятся определения типов, включая, как я полагаю, байт-код метода. Мне приходят в голову следующие два вопроса:
- Существует ли вообще какая-либо структура таблицы vtable/method в Java? Как он хранится и связывается с
Class
объектами? - Как решается вызов наследования/динамического метода? Я имею в виду:
Наличие следующих классов и экземпляров:
class A{ int f(){...} }
class B extends A{ int f(){...} }
A a = new B();
a.f();
f() в B вызывается. Является ли A разрешением через Class
файл B правильным указателем метода?
Заранее большое спасибо за ваши комментарии.