2013-07-24 3 views
1

, например, позволяет сказать, у вас есть:В нестационарном методе метод дублируется каждый раз, когда объект создается?

class X 
{ 
    public void foo() 
    { 

    } 

} 

, а затем в главном у вас есть

X anX = new X(); 
anX.foo(); 
X bX = new X(); 
bX.foo(); 

является «Foo» метод дублируется для каждого экземпляра X? Или каждый экземпляр просто повторно использует код метода foo.

+0

Каждый экземпляр использует тот же самый метод 'foo', по крайней мере, что он переопределен в подклассе. –

+1

Методы распределяются между экземплярами класса. Каждый объект просто говорит «эй, я этот объект, вызываю этот метод по отношению ко мне». – MathSquared

+1

Итак, единственная разница между нестатическими методами и статическими методами заключается в том, что статические методы могут быть вызваны без создания объекта. Они одинаковы в том, что существует только одна «главная копия» метода и что «главная копия» является единственной, используемой для всего. – 1110101001

ответ

1

Он будет повторно использовать код метода для каждого объекта. Какими изменениями подразумевается неявный аргумент, который является объектом, к которому вы вызываете метод.

1

Методы экземпляров отправляются (более или менее) с использованием указателя класса и внутренней таблицы виртуальных методов. Аналогичный, но немного более косвенный & медленнее, для методов, доступных через интерфейс.

Класс VMT и код метода загружаются один раз для ClassLoader &, который затем разделяется между всеми объектами с использованием метода. Таким образом, информация типа типа & не дублируется в памяти.

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

Статические методы OTOH не являются виртуализированными, не используют отправку VMT & в соответствии со статическим типом ссылки. Это разрешено во время компиляции.

Смежные вопросы