„Здравей, Амиго! Най-накрая стигнахме до нещо наистина интересно. Днес ще ви разкажа за множественото наследяване . Множественото наследяване наистина е много завладяващ и мощен инструмент. И ако не бяха няколко проблема, тогава Java ще поддържа множествено наследяване на класове. Но не го прави, така че трябва да се задоволим с множествено наследяване на интерфейси . Което също е доста страхотно."

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

Представете си, че пишете компютърна игра. И неговите герои (вашите обекти) трябва да се държат по много сложни начини: да се разхождате по картата, да събирате предмети, да изпълнявате мисии, да общувате с други герои, да убиете някого, да спасите някой друг. Да приемем, че сте успели да разделите всички обекти в 20 категории. Това означава, че ако имате късмет, ще можете да се справите само с 20 класа, за да дефинирате вашите обекти. Но тук е уловката: колко уникални форми на взаимодействие ще имат тези обекти? Всеки тип обект може да има уникални взаимодействия с 20 други типа обекти (ние също така броим взаимодействията с обекти от същия тип). С други думи, ще трябва да напишете code за 20 x 20 = 400 взаимодействия! И ако броят на уникалните типове обекти не е 20, а 100, тогава броят на взаимодействията може да бъде 10 000!

„Уау! Сега разбирам защо програмирането е толкова трудна работа.“

„Просто е. Благодарение на многото абстракции. И не малко благодарение на множеството наследяване на интерфейси.“

Често можем да опростим взаимодействието на обектите, ако си взаимодействат роли и/or способности, а не самите обекти. И Howто вече знаем, способностите могат лесно да бъдат добавени към клас, когато имплементира няHowъв интерфейс.

Когато пишат голяма програма, разработчиците обикновено правят това от самото начало:

1) Идентифицирайте всички способности/роли.

2) Определете взаимодействието между тези роли.

3) След това просто задайте роли на всички класове.

— Може би пример?

"Разбира се. Нека да разгледаме ролите в анимационния филм "Том и Джери"."

Java code Описание
interface Moveable
{}
— Роля/способност за движение.
interface Eatable
{}
— Роля/способност да бъде изяден.
interface Eat
{}
— Роля/способност да изядеш някого.
class Tom extends Cat implements Moveable, Eatable, Eat
{}
Том е котка, която има три роли:
1) Може да се движи
2) Може да изяде някого
3) Може да бъде изяден от някого (куче)
class Jerry extends Mouse implements Moveable, Eatable
{}
Джери е мишка, която има две роли:
1) Може да се движи
2) Може да бъде изяден от някого
class Killer extends Dog implements Moveable, Eat
{}
Убиецът е куче с две роли: 1) Може да се движи 2) Може да изяде някого

Познавайки само тези три роли (интерфейси), можете да напишете програма и да опишете правилното взаимодействие между тези роли. Например, обект ще преследва (чрез интерфейса Moveable) след «този, който можеш да изядеш» и ще избяга от «този, който може да те изяде». И всичко това без да знае за конкретни обекти. Ако добавите повече обекти (класове) към програмата и запазите тези роли, тя все още ще работи прекрасно, контролирайки поведението на вашите обекти.