Вопрос про переопределение методов

Annetka

Пусть есть класс Б унаследованный от класса А, в котором переопределён метод хз класса А.
инициализируем объект класса А, как Б и вызываем у него метод хз который из методов будет использоваться?

bleyman

Пусть есть класс Б унаследованный от класса А, в котором переопределён метод хз класса А.
инициализируем объект класса А, как Б и вызываем у него метод хз который из методов будет использоваться?

Хо-хо.

mirt1971

А был ли переопределяемый метод виртуальным?

bleyman

инициализируем объект класса А, как Б

Это в смысле А а = нью Б ?
Зависит от того, как ты его переопределяшь. Если он виртуальный, а ты его оверрайдишь, то настоящий (то есть Б.хз). Если он не виртуальный, или ты его переопределяешь (в шарпе - модификатор нью, в плюсах - не помню то А.хз.

Annetka

То есть зависит от того виртуальный или нет?

rosali

в плюсах - не помню

В плюсах всем все пох ничего не надо писать. Старый автоматически затеняется, а с ним еще и все его overload-ы, вот фигня...

Annetka

А в java?

haiawata2702

В джава все методы - виртуальные. Будет вызван метод класса Б. Даже можно сказать, что имея объект класса Б, ты никак не сможешь вызвать метод класса А.хз (если только не воспользуешься словом super внутри Б)

bleyman

В джава все методы - виртуальные.

Либо ты гонишь, либо жава пиздец говно.

Dazik

Объявляй их как final.

freezer

Старый автоматически затеняется, а с ним еще и все его overload-ы, вот фигня...

В шарпе вроде тоже overload'ы затеняются?..

bleyman

Я спросил у мадкроза, и мадкроз мне ответил, что джава вовсе не такое говно, а анонимус просто гонит.
В шарпе модель очень простая: виртуальный метод можно оверрайднуть (и ты опять получаешь виртуальный метод всегда) или скрыть (при помощи слова нью, получаешь невиртуальный метод, или же можно написАть new virtual ... и получишь виртуальный метод). Что характерно, отсутствие слова нью генерит не еррор, а варнинг. Потому что оно нужно читателю а не компилятору.
Когда определяется, что же нужно вызывать, делается следующее: если метод типа по которому ты обращаешься (а не настоящего типа) не виртуальный, то он и вызывается. Если виртуальный, то спускаемся вниз (от типа переменной до реального типа пока можем (т.е. пока встречаем только override). Всё.
Оставить комментарий
Имя или ник:
Комментарий: