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

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

Открыта

— Привет, Амиго! Наконец-то мы добрались до очень интересной темы. Сегодня я расскажу тебе про множественное наследование. На самом деле множественное наследование очень интересный и мощный инструмент. И если бы не некоторые проблемы, то в 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) за тем, «кого ты можешь съесть» и убегать от того, «кто может съесть тебя». И все это без знаний о конкретных объектах. Если в программу добавить еще объектов (классов), но оставить эти роли, она будет прекрасно работать – управлять поведением своих объектов.

Комментарии (162)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Grigoryvvv
Уровень 28
Expert
11 августа, 08:09
11.08.2026 / 23 уровень
Anonymous #3585174
Уровень 33
5 августа 2025, 14:35
Like
26 июля 2025, 03:54
Что еще за Killer ??? собаку звали Спайк
kekich119Beginner Java Develoeper в at Home
11 июня 2025, 19:20
Прикольно конечно, но особо не понятно как и когда это всё понадобится
Philipp Vasichev
Уровень 28
1 сентября 2024, 08:30
🤫
{Java_Shark}
Уровень 36
23 июля 2024, 11:30
Отличная лекция!!!))) Пойду мультик посмотрю, развеюсь чуть-чуть))) всем добра++
Илюха Будущий ЮниорJava - стажёр в ASTON
6 августа 2024, 10:18
лекция на 5 минут, мультик минимум на 15 отличный график! 😅
@itArarat
Уровень 32
16 января, 14:46
Том и Джери одна серия всегда шла до 6 минут
SomeBody098веник в бане
11 мая 2024, 10:58
:D
Tako Deyalko
Уровень 21
23 апреля 2024, 18:17
Как же тоскливо прокликивать обязательные задания, созданные для дошкольников, просто чтобы добраться до действительно интересующих тебя тем :( Первый курс-квест был не так плох, задания на лямбды даже позабавили. Жаль, что регулярок не завезли, хотя вполне могли бы. Эти же задачки...Мда. Тут даже про повторение шутить как-то устаёшь. Надеюсь, что к середине курс всё-таки что-то новое предоставит, а то я так до многопоточности, за которой пришёл изначально, не доживу.
Вадим М. Инженер Expert
15 декабря 2024, 11:25
Тут и новички есть, которым полезно будет такие задачи порешать, набить руку
ksv0
Уровень 28
6 февраля 2024, 06:15
- DRY. - Что? - Don't Repeat Yourself. - Ты о чем? - о DRY. - aaa и что с ним? - он означает Don't Repeat Yourself. - ясно а к чему это? - ну прост.
Pavel Fetisov
Уровень 30
16 февраля 2024, 14:13
так к чему это?))
JavaRusher853
Уровень 36
19 марта 2024, 20:55
просто так.
Илюха Будущий ЮниорJava - стажёр в ASTON
6 августа 2024, 10:19
В одной из лекций в Java Syntax нас познакомили с одним из золотых правил программиста - DRY. А сами повторяются.
Show
Уровень 30
17 сентября 2024, 17:27
Максим Li Backend Developer
12 ноября 2023, 23:09
Ок!