Вопрос про переопределение методов
Пусть есть класс Б унаследованный от класса А, в котором переопределён метод хз класса А.
инициализируем объект класса А, как Б и вызываем у него метод хз который из методов будет использоваться?
Хо-хо.
А был ли переопределяемый метод виртуальным?
инициализируем объект класса А, как Б
Это в смысле А а = нью Б ?
Зависит от того, как ты его переопределяшь. Если он виртуальный, а ты его оверрайдишь, то настоящий (то есть Б.хз). Если он не виртуальный, или ты его переопределяешь (в шарпе - модификатор нью, в плюсах - не помню то А.хз.
То есть зависит от того виртуальный или нет?
в плюсах - не помню
В плюсах всем все пох ничего не надо писать. Старый автоматически затеняется, а с ним еще и все его overload-ы, вот фигня...
А в java?
В джава все методы - виртуальные. Будет вызван метод класса Б. Даже можно сказать, что имея объект класса Б, ты никак не сможешь вызвать метод класса А.хз (если только не воспользуешься словом super внутри Б)
В джава все методы - виртуальные.
Либо ты гонишь, либо жава пиздец говно.
Объявляй их как final.
Старый автоматически затеняется, а с ним еще и все его overload-ы, вот фигня...
В шарпе вроде тоже overload'ы затеняются?..
В шарпе модель очень простая: виртуальный метод можно оверрайднуть (и ты опять получаешь виртуальный метод всегда) или скрыть (при помощи слова нью, получаешь невиртуальный метод, или же можно написАть new virtual ... и получишь виртуальный метод). Что характерно, отсутствие слова нью генерит не еррор, а варнинг. Потому что оно нужно читателю а не компилятору.
Когда определяется, что же нужно вызывать, делается следующее: если метод типа по которому ты обращаешься (а не настоящего типа) не виртуальный, то он и вызывается. Если виртуальный, то спускаемся вниз (от типа переменной до реального типа пока можем (т.е. пока встречаем только override). Всё.
Оставить комментарий
Annetka
Пусть есть класс Б унаследованный от класса А, в котором переопределён метод хз класса А.инициализируем объект класса А, как Б и вызываем у него метод хз который из методов будет использоваться?