Этот вопрос закрыт для ответов, так как повторяет вопрос Как ответить на вопрос по поводу полиморфизма в Java?
@kiru
Аналитик

Можете привести простой пример (код) полиморфизма на Java?

Полиморфизм - позволяет нам, используя один и тот же интерфейс работать с различными классами объектов.
Не могу понять как это работает. Можете пояснить?

Пример: у нас есть Интерфейс "Подразделения", у него есть метод "Посчитать количество сотрудников". Реализует этот интерфейс классы "Цех" и "Отдел" у которых реализованы методы "Посчитать количество сотрудников" .

Под полиморфизмом имеется ввиду, что если нужно вызвать метод класса "Цех", то другой класс, например "Компания", обратившись к интерфейсу "Подразделение" и вызвав метод "Посчитать количество сотрудников", может вызвать метод класса "Цех".

Вопрос: а зачем обращаться к интерфейсу, если можно обратиться сразу к классу "Цех" и вызвать его метод?
Можете привести пример полиморфизма на простом коде, с вашими комментариями, пожалуйста577cadeb3caa45e79539c4fea4c003a8.png
  • Вопрос задан
  • 829 просмотров
Решения вопроса 1
Shockoway
@Shockoway
Интерфейс это перечень методов, а если чуть абстрагироваться, то это определенная модель поведения и когда какой-то класс реализует интерфейс это означает, что он гарантированно поддерживает описанную в интерфейсе модель поведения. Тем самым если у вас есть определенный набор разных классов (в данном случае это Цех и Отдел), но поддерживающих одну и ту же модель поведения (интерфейс Подразделение), то это позволяет вам взаимодействовать с ним не глядя на то, к какому конкретно классу они принадлежат.
Сценариев применения на практике - множество, но вот вам простейший:
Допустим у вас есть задача (взято с потолка) посчитать ежедневные затраты на питание всех сотрудников того или иного подразделения. В итоге получается, что нам нужен метод, который принимал бы в качестве аргумента экземпляр подразделения и возвращал бы конкретную сумму.
// Subdivision это тот самый интерфейс "Подразделение"
int getFoodCost(Subdivision subdivision) {
	// допустим, что на каждого человека тратится по 300 руб в день
	return subdivision.numberOfEmployers() * 300;
}

В результате мы получаем метод, который может работать абсолютно с любыми классами, которые реализуют интерфейс Subdivision. А вот если бы вы не использовали интерфейс, а просто добавили бы в каждый класс по методу numberOfEmployers(), то для каждого класса пришлось бы писать свою версию getFoodCost().
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы