Java - виртуальные методы

Как виртуальные функции работают за кулисами Inheritance? Компилятор специально рассматривает виртуальные функции?

Ответы

Ответ 1

Да, виртуальные методы обрабатываются по-разному с помощью компилятора и среды выполнения. JVM специально использует таблицу виртуальных методов для отправки виртуального метода:

Таблица диспетчера объектов будет содержат адреса объекта динамически связанные методы. метод вызовы выполняются путем извлечения адрес метода из объекта таблица рассылки. Таблица рассылки то же самое для всех объектов, принадлежащих тот же класс, и поэтому обычно разделяемых между ними. Объекты принадлежность к классам, совместимым с типом (например, братьев и сестер в иерархия наследования) раскладные столы с одинаковым расположением: адрес данного метода будет появляться с одинаковым смещением для всех совместимых с классом классов. Таким образом, выбор адреса метода из заданное смещение таблицы отправки метод, соответствующий объект фактический класс.

Ответ 2

Все методы в Java по умолчанию являются виртуальными. Это означает, что любой метод может быть переопределен при использовании в наследовании, если этот метод не объявлен как окончательный или статический.

Ответ 3

"Виртуальный" - это термин С++. На Java нет виртуальных методов. Существуют обычные методы, которые являются временными и полиморфными, а также статическими или конечными методами, которые не являются.