Java - виртуальные методы - PullRequest
17 голосов
/ 21 марта 2010

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

Ответы [ 3 ]

37 голосов
/ 21 марта 2010

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

14 голосов
/ 22 марта 2010

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

13 голосов
/ 21 марта 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...