Методы экземпляров отправляются (более или менее) с использованием указателя класса и внутренней таблицы виртуальных методов. Аналогичный, но немного более косвенный & медленнее, для методов, доступных через интерфейс.
Класс VMT и код метода загружаются один раз для ClassLoader &, который затем разделяется между всеми объектами с использованием метода. Таким образом, информация типа типа & не дублируется в памяти.
Объекты всегда сохраняют свой указатель на класс и (внутреннюю) таблицу виртуальных методов. Это относится к кастомизации подтипа или присвоению супертипа. Класс объекта и внутренний указатель назначаются при построении и инвариантны для времени жизни объекта.
Статические методы OTOH не являются виртуализированными, не используют отправку VMT & в соответствии со статическим типом ссылки. Это разрешено во время компиляции.
Каждый экземпляр использует тот же самый метод 'foo', по крайней мере, что он переопределен в подклассе. –
Методы распределяются между экземплярами класса. Каждый объект просто говорит «эй, я этот объект, вызываю этот метод по отношению ко мне». – MathSquared
Итак, единственная разница между нестатическими методами и статическими методами заключается в том, что статические методы могут быть вызваны без создания объекта. Они одинаковы в том, что существует только одна «главная копия» метода и что «главная копия» является единственной, используемой для всего. – 1110101001