Статическая привязка и динамическая привязка без методов

У меня был экзамен в колледже по объектно-ориентированному программированию. Один из вопросов касался статического связывания и динамического связывания.

Вопрос был в следующем:

Shape s; if(i==1) s = new Point(1,2); else s = new Rectange(10,20); //this is dynamic binding.

ДА/НЕТ введите описание изображения здесь кстати, это не мой ответ.

Мой учитель сказал, что ответ "нет", потому что это статическая привязка.

Насколько я знаю, статическая привязка и динамическая привязка происходят только тогда, когда я вызываю методы. Я прочитал все вопросы StackOverflow и множество сообщений в блогах по этой теме, и единственный ответ, который я могу придумать, это то, что существует динамическая привязка.

Любое объяснение будет оценено.


person humazed    schedule 28.12.2015    source источник
comment
Вы жестко закодировали, что s относится либо к экземпляру Point, либо к экземпляру Rectangle... что в этом динамического?   -  person Tom    schedule 28.12.2015
comment
Это всего лишь предположение, но, возможно, ваш учитель имел в виду, что возможные типы известны во время компиляции. Невозможно ввести новый неизвестный тип во время выполнения, как это было бы, если бы вы использовали отражение для создания экземпляра объекта.   -  person erickson    schedule 28.12.2015


Ответы (2)


привязка просто означает, что вы связываете имя с объектом, поэтому здесь происходит привязка.

Это динамическая привязка, см. статью в Википедии:

Привязка имен перед запуском программы называется статической (также ранней); привязки, выполняемые во время работы программы, являются динамическими (также поздними или виртуальными).

Примером статической привязки является прямой вызов функции C: функция, на которую ссылается идентификатор, не может изменяться во время выполнения.

Но примером динамического связывания является динамическая диспетчеризация, как при вызове виртуального метода C++. Поскольку конкретный тип полиморфного объекта неизвестен до выполнения (в общем случае), выполняемая функция динамически связывается.

Несмотря на то, что опубликованный код предопределяет, что s будет установлено, установив i, что делает это динамичным, так это то, что методы, вызываемые для s, будут разрешены во время выполнения.

person Nathan Hughes    schedule 28.12.2015

Нет. Это динамическая привязка.

Значение переменной i неизвестно во время компиляции. В зависимости от значения переменной i во время выполнения была установлена ​​форма. Как предположил Натан Хьюз, методы, вызываемые в Shape, разрешаются во время выполнения, что приводит к позднему динамическому связыванию.

person Ravindra babu    schedule 28.12.2015