Я читаю эту статью о том, как JVM вызывает методы, и я думаю, что я получил большую часть этого. Тем не менее, мне все еще трудно понять необходимость invokeinterface
.
Как я понимаю, класс в основном имеет виртуальную таблицу методов, а при вызове метода с помощью invokevirtual
или invokeinterface
с этой виртуальной таблицей обращаются.
В чем же разница между методом, определенным на интерфейсе, и методом, определенным в базовом классе? Почему разные байткоды?
описание инструкций также выглядит очень похоже.
В статье, по-видимому, утверждается, что таблица методов интерфейса может иметь "разные смещения" каждый раз, когда вызывается метод. Я не понимаю, почему интерфейс будет иметь таблицу методов вообще, поскольку ни один объект не может иметь интерфейс как его фактический тип.
Что мне не хватает?