Ключевые различия между виртуальными таблицами в C++ и Java заключаются в следующем:
В C++ всякий раз, когда функция-член класса объявляется как виртуальная, компилятор создаёт в памяти виртуальную таблицу, которая содержит все указатели на функции, объявленные как виртуальные в этом классе. 1 Это позволяет использовать полиморфизм во время выполнения (находить нужную функцию во время выполнения). 1 Обычно компилятор создаёт отдельную виртуальную таблицу для каждого класса. 34
В Java все методы по умолчанию являются виртуальными. 1 Это означает, что любой метод может быть переопределён при использовании в наследовании, если только этот метод не объявлен как final или static. 1 Каждый объект содержит указатель на дескриптор класса, который содержит виртуальную таблицу. 2 Этот указатель устанавливается сразу после выделения объекта и до вызова любых конструкторов. 2