"안녕하세요, 아미고! 드디어 정말 흥미로운 것을 발견했습니다. 오늘은 다중 상속 에 대해 말씀드리겠습니다 . 다중 상속은 참으로 매우 매력적이고 강력한 도구입니다. 그리고 몇 가지 문제가 없다면 Java는 클래스의 다중 상속을 지원합니다. 하지만 지원하지 않으므로 인터페이스의 다중 상속 에 만족해야 합니다 . 이 또한 매우 훌륭합니다."

여러 인터페이스 상속 - 1

컴퓨터 게임을 작성하고 있다고 상상해보십시오. 그리고 그 캐릭터(객체)는 매우 복잡한 방식으로 행동해야 합니다. 지도를 돌아다니고, 아이템을 수집하고, 퀘스트를 수행하고, 다른 캐릭터와 소통하고, 누군가를 죽이고, 다른 누군가를 구해야 합니다. 모든 개체를 20개의 범주로 나눌 수 있다고 가정해 보겠습니다. 즉, 운이 좋다면 개체를 정의하는 데 20개의 클래스만 사용할 수 있습니다. 그러나 여기에 문제가 있습니다. 이러한 개체에는 얼마나 많은 고유한 상호 작용 형식이 있습니까? 각 유형의 개체는 20개의 다른 유형의 개체와 고유한 상호 작용을 할 수 있습니다(동일한 유형의 개체와의 상호 작용도 포함됨). 즉, 20 x 20 = 400 상호 작용에 대한 코드를 작성해야 합니다! 고유 개체 유형의 수가 20개가 아니라 100개라면 상호 작용의 수는 10,000개가 될 수 있습니다!

"와우! 이제야 프로그래밍이 왜 그렇게 어려운 일인지 이해가 가네요."

"간단합니다. 많은 추상화 덕분입니다. 인터페이스의 다중 상속 덕분입니다."

개체 자체가 아니라 역할 및/또는 능력이 상호 작용하는 경우 개체 상호 작용을 단순화할 수 있습니다. 그리고 우리가 이미 알고 있듯이 클래스가 일부 인터페이스를 구현할 때 클래스에 능력을 쉽게 추가할 수 있습니다.

대규모 프로그램을 작성할 때 개발자는 일반적으로 맨 처음부터 다음을 수행합니다.

1) 모든 능력/역할을 식별합니다.

2) 이러한 역할 간의 상호 작용을 정의합니다.

3) 그런 다음 모든 클래스에 역할을 할당하기만 하면 됩니다.

"예를 들어?"

"물론이죠. 만화 «톰과 제리»의 역할을 봅시다."

자바 코드 설명
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
{}
킬러는 두 가지 역할을 하는 개입니다. 1) 움직일 수 있습니다. 2) 사람을 먹을 수 있습니다.

이 세 가지 역할(인터페이스)만 알면 프로그램을 작성하고 이러한 역할 간의 올바른 상호 작용을 설명할 수 있습니다. 예를 들어, 객체는 "당신이 먹을 수 있는 것"을 쫓고 "당신을 먹을 수 있는 것"으로부터 도망칠 것입니다. 그리고 이 모든 것은 특정 대상에 대해 알지 못한 채 이루어집니다. 프로그램에 더 많은 개체(클래스)를 추가하고 이러한 역할을 유지하면 개체의 동작을 제어하면서 여전히 아름답게 작동합니다.