JavaRush /Курсы /Модуль 2. Java Core /Множественное наследование интерфейсов

Множественное наследование интерфейсов

Модуль 2. Java Core
4 уровень , 4 лекция
Открыта

— Привет, Амиго! Наконец-то мы добрались до очень интересной темы. Сегодня я расскажу тебе про множественное наследование. На самом деле множественное наследование очень интересный и мощный инструмент. И если бы не некоторые проблемы, то в Java было бы множественное наследование классов. Но т.к. его нет, придется довольствоваться множественным наследованием интерфейсов. Что тоже не мало.

Множественное наследование интерфейсов - 1

Представь, что ты пишешь компьютерную игру. И ее герои – твои объекты – должны демонстрировать очень сложное поведение: ходить по карте, собирать предметы, выполнять квесты, общаться с другими героями, кого-то убивать, кого-то спасать. Допустим, ты смог разделить все объекты на 20 категорий. Это значит, что если тебе повезет, ты можешь обойтись всего 20-ю классами, для их описания. А теперь вопрос на засыпку: сколько всего уникальных видов взаимодействия у этих объектов. Объект каждого типа может иметь уникальные взаимодействия с 20-ю видами других объектов (себе подобных тоже считаем). Т.е. всего нужно запрограммировать 20 на 20 – 400 взаимодействий! А если уникальных видов объектов будет не 20, а 100, количество взаимодействий может достигнуть 10,000!

— Ничего себе! Теперь понимаю, почему программирование такая непростая работа.

— Она простая. Благодаря многим абстракциям. И в не последнюю очередь – множественному наследованию интерфейсов.

Очень часто можно упростить взаимодействие объектов, если взаимодействовать будут не объекты, а их роли и/или способности. А способности, как мы уже знаем, легко добавляются в класс, когда он реализует некоторый интерфейс.

Когда пишется большая программа, обычно с этого сразу и начинают:

1) Определяют все существующие способности/роли.

2) Затем описывают взаимодействие между этими ролями.

3) А потом просто наделяют все классы их ролями.

— А можно пример?

— Конечно. Давай рассмотрим роли, на основе героев мультика «Том и Джерри».

Код на Java Описание
interface Moveable
{}
— роль/способность передвигаться.
interface Eatable
{}
— роль/способность быть съеденным.
interface Eat
{}
— роль/способность съесть кого-нибудь.
class Tom extends Cat implements Moveable, Eatable, Eat
{}
Tom – это кот, у которого есть три роли:
1) может передвигаться
2) может кого-то съесть
3) может быть съеденным кем-то (собакой)
class Jerry extends Mouse implements Moveable, Eatable
{}
Jerry – это мышь, у которого есть две роли:
1) может передвигаться
2) может быть съеденным кем-то
class Killer extends Dog implements Moveable, Eat
{}
Killer – это собака, у которого есть две роли: 1) может передвигаться 2) может кого-то съесть

Зная всего эти три роли (интерфейса) можно написать программу и описать корректное взаимодействие этих ролей. Например, объект будет гнаться (посредством интерфейса Moveable) за тем, «кого ты можешь съесть» и убегать от того, «кто может съесть тебя». И все это без знаний о конкретных объектах. Если в программу добавить еще объектов (классов), но оставить эти роли, она будет прекрасно работать – управлять поведением своих объектов.

4
Задача
Java Core, 4 уровень, 4 лекция
Недоступна
Building и School
Есть просто здание, а есть здание школы. Унаследуйте одно от другого, и подумайте, объект какого класса должен возвращать методы getSchool и getBuilding. Измените null на объект класса Building или School.
8
Задача
Java Core, 4 уровень, 4 лекция
Недоступна
Коты
Создайте приложение для переписи котов. Для начала попросите пользователя вводить имена котов. После этого программа должна создать объекты cat класса Cat с соответствующими именами и выводить на экран cat.toString().
8
Задача
Java Core, 4 уровень, 4 лекция
Недоступна
Пора покушать
Создадим основу меню для ресторанов, а точнее — функцию выбора еды. Для начала реализуем интерфейс Selectable в классе Food и метод onSelect(), который должен выводить на экран фразу «The food was selected». Подумайте, какие методы можно вызвать для переменной food и какие для selectable.
4
Задача
Java Core, 4 уровень, 4 лекция
Недоступна
Без ошибок
И снова что-то не так в этой задаче. Так что вам предстоит кое-что исправить, а именно — инициализировать объект obj таким классом, чтобы метод main выполнился без ошибок.
4
Задача
Java Core, 4 уровень, 4 лекция
Недоступна
Player and Dancer
На планете Терра практически каждый танцор или игрок является человеком. Так и в этой программе, часть которой — перед вами. Посмотрите, что она уже умеет делать, и измените метод haveFun так, чтобы он вызвал метод play для игрока и dance — для танцора.
Комментарии (6)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Руслан Уровень 46
15 сентября 2025
Прикольная задачка!!!
23 ноября 2022
В Корее Спайк реализовал бы интерфейс Edible
I'm Siberian Уровень 109 Expert
24 августа 2024
лол
Andrei Уровень 34
29 июня 2022
Почему Том Eatable? потому что его может сожрать Спайк?
Михаил Уровень 102 Expert
4 августа 2022
в точку! )
Диба Уровень 109 Expert
15 апреля 2022