5 / 3 / 1
Регистрация: 31.03.2014
Сообщений: 200
|
||||||
1 | ||||||
Полимофризм13.12.2014, 17:55. Показов 1113. Ответов 7
Метки нет (Все метки)
0
|
13.12.2014, 17:59 | 2 |
А как должен?
Внимательно посмотрите: 1. Создали ссылку типа класса наследника и присвоили ей экземпляр объекта. 2. Вызвали метод. 3. Создали ссылку типа класса родителя и присвоили ей экземпляр класса наследника. 3. Вызвали метод. Какой метод должен вызваться? Экземпляр-то всего один, типа класса наследника.
1
|
5 / 3 / 1
Регистрация: 31.03.2014
Сообщений: 200
|
|
13.12.2014, 18:08 [ТС] | 3 |
insite2012, а если бы в Base ещё был бы void метод, и его вызвать через instanceUp.Method2(); он бы вызывался из экземпляра наследника?
0
|
5 / 3 / 1
Регистрация: 31.03.2014
Сообщений: 200
|
||||||
13.12.2014, 18:18 [ТС] | 5 | |||||
insite2012, а если Derived такой
0
|
13.12.2014, 18:24 | 6 | |||||
Потому что у вас переменная (ссылка) типа базового класса, а он ничего об этом методе не знает. Приведите явно ссылку к типу класса наследника и вызывайте. Примерно так:
1
|
5 / 3 / 1
Регистрация: 31.03.2014
Сообщений: 200
|
||||||
13.12.2014, 18:57 [ТС] | 7 | |||||
insite2012,
0
|
13.12.2014, 19:01 | 8 |
Сообщение было отмечено Psilon как решение
Решение
Ну это же очевидно. Он есть в базовом классе. Естественно, мы можем его вызвать. Но поскольку ссылке типа класса родителя присвоен экземпляр класса наследника, а этот метод в наследнике переопределен, то именно он и вызывается.
1
|
13.12.2014, 19:01 | |