Как виртуальные функции работают за кулисами в Inheritance? Компилятор обрабатывает виртуальные функции специально?
Все методы в Java являются виртуальными по умолчанию. Это означает, что любой метод может быть переопределен при использовании в наследовании, если только этот метод не объявлен как final или static.
«Виртуальный» - это термин C ++.В Java нет виртуальных методов.Существуют обычные методы, которые являются полиморфными во время выполнения, и статические или конечные методы, которых нет.
Да, виртуальные методы обрабатываются компилятором и средой выполнения по-разному. JVM специально использует таблицу виртуальных методов для отправки виртуальных методов:
Таблица отправки объекта будет содержать адреса объекта динамически связанные методы. метод вызовы выполняются путем извлечения адрес метода из объекта диспетчерский стол. Таблица отправки одинаково для всех объектов, принадлежащих тот же класс, и, следовательно, как правило, разделяется между ними. Объекты принадлежность к типо-совместимым классам (например, братья и сестры в иерархия наследования) будет иметь отправка таблиц с одинаковым расположением: адрес данного метода будет появляются с одинаковым смещением для всех совместимые с типом классы. Таким образом, выбирая адрес метода из получит смещение таблицы диспетчеризации метод, соответствующий фактический класс объекта.