145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,239
|
||||||
1 | ||||||
Полиморфизм: вызов метода базового класса, переопределенного метода и нового метода30.04.2012, 17:33. Показов 15979. Ответов 3
Метки нет Все метки)
(
В базовом классе метод помечен как virtual.
Насколько я понял из книги: override означает, что метод не утрачивает связи с базовым классом. New означает полное переопределение метода. Таким образом, в моем понимании, возможны три варианта: 1. Вызов метода базового класса путем обращения с экземпляром дочернего класса как с экземпляром родительского класса (например, при помещении в массив экземпляров родительского класса). 2. Вызов переопределенного метода (overridden). 3. Вызов нового метода (new). И надеялся в своем примере получить: Overridden имя кошки: Murka. В базовом классе: Baikal New имя собаки:Baikal Т.е. в цикле foreach должен у собаки вызваться метод из базового класса (потому что я в этом цикле прогоняю экземпляры класса Animal). А вот когда я конкретно вызываю метод получения имени для класса Dog, то должен сработать новый метод. Почему в своем примере я получаю результат Overridden имя кошки: Murka. В базовом классе: Baikal В базовом классе: Baikal ? Заранее спасибо.
0
|
|
30.04.2012, 17:33 | |
Ответы с готовыми решениями:
3
Вызов метода из базового класса Вызов метода базового класса Вызов метода наследика с базового класса |
![]() 17438 / 12830 / 3361
Регистрация: 17.09.2011
Сообщений: 21,108
|
|
30.04.2012, 19:11 | 2 |
Потому что вы сами ответили на свой вопрос:
То есть метод, определенный как new, может быть использован только в том случае, когда он вызывается по ссылке на класс, его определивший. В противном случае будет вызван родительский метод, что у вас и происходит. На всякий случай: "new" с английского переводится как "новый". То есть не имеющий ничего общего с уже существующим.
1
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,239
|
||||||
30.04.2012, 19:27 [ТС] | 3 | |||||
Нет, не получается что-то.
Попробовал сначала создать кошку и собаку, а затем запихнуть их в массив с типом Animal. Но почему-то после цикла новый метод у меня не пишет "New имя собаки: Baikal".
0
|
![]() 17438 / 12830 / 3361
Регистрация: 17.09.2011
Сообщений: 21,108
|
|
30.04.2012, 21:06 | 4 |
Понял.
У вашего "нового" метода модификатор private, потому любой вызов публичного метода будет ссылаться на метод из класса Animal.
1
|
30.04.2012, 21:06 | |
30.04.2012, 21:06 | |
Помогаю со студенческими работами здесь
4
Вызов метода базового класса игнорируя переопределенный метод в производном классе Переопределение метода базового класса Перекрытие метода базового класса Переопределение метода базового класса в производном Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |