6 / 6 / 5
Регистрация: 21.03.2014
Сообщений: 18
|
||||||
1 | ||||||
Не вызывается метод из базового типа после приведения типов?23.03.2015, 10:46. Показов 1569. Ответов 10
Метки нет (Все метки)
При приведении типов от производного класса Manager к базовому классу Employee, у объекта "e" к которому был приведен Manager, вызывается метод из производного класса.
0
|
23.03.2015, 10:46 | |
Ответы с готовыми решениями:
10
Вызывается метод из базового класса Наследование: почему вызывается метод базового класса, а не производного? Как сделать явное приведения переменной типа класса-наследника к типу базового класса? Почему при восходящем приведении типов вызывается метод класса потомка? |
6 / 6 / 5
Регистрация: 21.03.2014
Сообщений: 18
|
||||||
23.03.2015, 12:01 [ТС] | 3 | |||||
Сорри, опечатался.
0
|
23.03.2015, 12:16 | 4 |
А где вы тут усмотрели приведение типов? Я вот его никак не вижу...
Вижу создание экземпляра производного класса. Вижу создание ссылки типа родителя класса с присвоением ей ссылки на экземпляр наследника. Все. Ни о каком приведении типов речи тут нет.
0
|
6 / 6 / 5
Регистрация: 21.03.2014
Сообщений: 18
|
||||||
23.03.2015, 12:31 [ТС] | 6 | |||||
0
|
6 / 6 / 5
Регистрация: 21.03.2014
Сообщений: 18
|
||||||
23.03.2015, 13:04 [ТС] | 8 | |||||
Понятно, что с помощью virtual и override мы можем переопределять в наследниках члены.
Вопрос в другом. Почему преобразуя производный тип к базовому, сохраняется переопределенный метод производного типа, мы же по сути отбрасываем наследника. Почему метод ToString()/GetType() преобразованного объекта, возвращает имя производного типа, а не базового.
0
|
23.03.2015, 13:10 | 9 |
Сообщение было отмечено ALGORE как решение
Решение
А с какой стати он должен так делать? Его тип - тип наследника, и то что вы можете в ссылке типа родителя хранить ссылку на объект наследника (что работает благодаря неявному преобразованию типов сверху вниз), не значит что метод GetType() скажет, что объект стал типа родителя.
А что касается метода - тоже вполне ожидаемо. Наследник переопределил метод родителя, и он будет вызываться, какая бы ссылка не указывала на этот объект - наследника или родителя. До "собственной" реализации метода в родителе вы никак не доберетесь, объект-то создан наследником, и метод уже переопределен.
1
|
17794 / 12945 / 3381
Регистрация: 17.09.2011
Сообщений: 21,228
|
|
23.03.2015, 13:11 | 10 |
Потому что если обращаться к вам как к примату, выполнять действие "ходить" вы все равно будете как человек.
0
|
23.03.2015, 13:18 | 11 | |||||
ALGORE, если вам надо обязательно добираться до реализации метода в родителе, то следует изменить в реализации метода наследника модификатор override на new. Тогда это возможно. Примерно вот так.
0
|
23.03.2015, 13:18 | |
23.03.2015, 13:18 | |
Помогаю со студенческими работами здесь
11
Вызов оператора приведения базового класса Почему если при вызове метода Foo от типа B, в объекте класса FooImp вызывается метод от А? Метод в конструкторе вызывается задолго после создания объекта Метод вызывается только после второго нажатия на кнопку Не вызывается конструктор базового класса Не вызывается нужный конструктор базового класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Как запретить подсветку выделенного текста с помощью CSS
InfoMaster 20.01.2025
Подсветка текста при выделении является стандартным поведением браузера, которое не всегда соответствует дизайнерским решениям или функциональным требованиям веб-приложения.
Выделение текста может. . .
|
Как выполнить другую программу или системную команду из Python
InfoMaster 20.01.2025
Python предоставляет мощные инструменты для выполнения системных команд и управления внешними процессами, что делает его идеальным выбором для автоматизации различных задач системного. . .
|
Как узнать директорию bash-скрипта из самого bash-скрипта
InfoMaster 20.01.2025
При разработке bash-скриптов одной из важных задач является определение директории, в которой находится исполняемый скрипт. Это критически важно для корректной работы с файлами, загрузки конфигураций. . .
|
В чем разница между let и var в JavaScript
InfoMaster 20.01.2025
JavaScript прошел длинный путь эволюции с момента своего создания в 1995 году. Одним из важнейших аспектов развития языка стало совершенствование механизмов объявления и управления переменными. . . .
|
Эффективная работа со строками в Go
InfoMaster 20.01.2025
Язык программирования Go предлагает уникальный подход к работе со строками, который существенно отличается от многих других языков программирования. В Go строки представляют собой неизменяемые. . .
|
Как проверить, что отображение (map) содержит ключ в Go
InfoMaster 20.01.2025
Отображения (maps) в языке программирования Go представляют собой мощные структуры данных, которые позволяют хранить пары ключ-значение и обеспечивают быстрый доступ к данным по уникальным. . .
|
Как организовать домашнее хранилище фильмов с общим доступом для всей семьи
InfoMaster 20.01.2025
Преимущества домашнего медиасервера
В современном мире, где цифровой контент стал неотъемлемой частью нашей жизни, организация домашнего медиасервера становится все более актуальной задачей. . . .
|
Перспективы развития жестких дисков: есть ли у них будущее?
InfoMaster 20.01.2025
История и эволюция жестких дисков
История развития жестких дисков начинается в 1956 году, когда компания IBM представила первое устройство для хранения данных на магнитных пластинах - IBM 350. . .
|
Распознавание изображений (компьютерное зрение) на C++
InfoMaster 20.01.2025
Введение в компьютерное зрение и основы работы с изображениями
Компьютерное зрение представляет собой одну из наиболее динамично развивающихся областей информационных технологий, позволяющую. . .
|
Какой язык программирования лучший для разработки нейронных сетей
InfoMaster 20.01.2025
В современном мире технологий искусственные нейронные сети становятся неотъемлемой частью множества инновационных решений, от распознавания речи до автоматического управления транспортными. . .
|
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
|
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
|