145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,245
|
||||||
1 | ||||||
Полиморфизм: вызов метода базового класса, переопределенного метода и нового метода30.04.2012, 17:33. Показов 16377. Ответов 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
Экземпляры класса, вызов переопределенного метода Вызов метода из базового класса Вызов метода базового класса Вызов метода наследика с базового класса |
17794 / 12945 / 3381
Регистрация: 17.09.2011
Сообщений: 21,228
|
|
30.04.2012, 19:11 | 2 |
Потому что вы сами ответили на свой вопрос:
То есть метод, определенный как new, может быть использован только в том случае, когда он вызывается по ссылке на класс, его определивший. В противном случае будет вызван родительский метод, что у вас и происходит. На всякий случай: "new" с английского переводится как "новый". То есть не имеющий ничего общего с уже существующим.
1
|
145 / 113 / 31
Регистрация: 12.06.2011
Сообщений: 1,245
|
||||||
30.04.2012, 19:27 [ТС] | 3 | |||||
Нет, не получается что-то.
Попробовал сначала создать кошку и собаку, а затем запихнуть их в массив с типом Animal. Но почему-то после цикла новый метод у меня не пишет "New имя собаки: Baikal".
0
|
17794 / 12945 / 3381
Регистрация: 17.09.2011
Сообщений: 21,228
|
|
30.04.2012, 21:06 | 4 |
Понял.
У вашего "нового" метода модификатор private, потому любой вызов публичного метода будет ссылаться на метод из класса Animal.
1
|
30.04.2012, 21:06 | |
30.04.2012, 21:06 | |
Помогаю со студенческими работами здесь
4
Вызов метода базового класса игнорируя переопределенный метод в производном классе Переопределение метода базового класса Перекрытие метода базового класса Переопределение метода базового класса в производном Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи | |||||
Преобразование полей (элементов управления содержимым) в обычный текст
РоΜа 23.01.2025
Возникла необходимость преобразовать поля в текст (те, что на вкладке разработчик добавляются) . Помучившись родил следующее:
Sub ПоляВТекст()
Преобразует все поля в текст (даты, текст,. . .
|
Как проверить существование директории в скрипте Bash
bt_guru 23.01.2025
При разработке скриптов Bash одной из ключевых задач является корректная работа с файловой системой, где особое место занимает проверка существования директорий. Эта операция становится критически. . .
|
Как работают срезы (slice) в Python
bytestream 23.01.2025
Python предоставляет разработчикам мощный и гибкий инструмент для работы с последовательностями данных - срезы (slices). Эта функциональность позволяет извлекать, модифицировать и управлять. . .
|
Как удалить подмодуль (submodule) в Git
bytestream 23.01.2025
При работе с крупными проектами в системе контроля версий Git разработчики часто сталкиваются с необходимостью управления зависимостями и внешними компонентами. Подмодули (submodules) представляют. . .
|
В чем разница между @staticmethod и @classmethod в Python. Декораторы методов
bytestream 23.01.2025
В Python декораторы методов представляют собой мощный инструмент, позволяющий модифицировать поведение функций и методов без изменения их исходного кода. Эта возможность является одной из. . .
|
Как преобразовать InputStream в String в Java
bytestream 23.01.2025
В мире Java-разработки работа с потоками данных является одной из ключевых операций при создании современных приложений. InputStream, как фундаментальный класс для обработки входных потоков данных,. . .
|
Как обновить форк (ответвление) репозитория в Git
bytestream 23.01.2025
Одним из наиболее мощных инструментов Git для организации совместной работы является механизм форкинга репозиториев, который позволяет создавать независимые копии проектов для дальнейшей разработки. . . .
|
Как работает async/await в C#. Асинхронное программирование в .NET
bytestream 23.01.2025
Введение в асинхронное программирование
Асинхронное программирование представляет собой важнейшую концепцию современной разработки программного обеспечения, особенно в контексте создания. . .
|
КуМир: полное руководство
bytestream 23.01.2025
Введение в КуМир: история создания и назначение
КуМир (Комплект Учебных МИров) представляет собой образовательную среду программирования, которая была создана для обучения основам алгоритмизации и. . .
|
Что такое OLAP. Где и как использовать многомерный анализ данных
bytestream 23.01.2025
Введение в OLAP-технологии
В современном мире бизнес-аналитика и обработка больших массивов данных играют ключевую роль в принятии стратегических решений. Организации накапливают огромные объемы. . .
|
MongoDB: что это, для чего нужна и как использовать
bytestream 23.01.2025
Введение в MongoDB: современная документоориентированная СУБД
В современном мире разработки программного обеспечения выбор правильной системы управления базами данных является критически важным. . .
|
Как использовать закрытый ключ шифрования в Git. Шифрование в Git
bytestream 23.01.2025
Установка и настройка закрытых ключей в Git предоставляет дополнительный уровень безопасности для работы с репозиториями. Для начала необходимо создать пару ключей, обычно это осуществляется с. . .
|