“你好,阿米戈!我們終於來到了一個真正有趣的東西。今天我要告訴你多重繼承。多重繼承確實是一個非常迷人和強大的工具。如果不是因為幾個問題,那麼 Java會支持類的多重繼承。但它不支持,所以我們必須滿足於接口的多重繼承。這也非常棒。”

繼承多個接口 - 1

假設您正在編寫一個電腦遊戲。它的角色(你的對象)必須以非常複雜的方式行事:在地圖上行走、收集物品、執行任務、與其他角色交流、殺人、救人。假設您已經能夠將所有對象分為 20 個類別。這意味著,如果幸運的話,您將能夠僅使用 20 個類來定義您的對象。但這裡有一個問題:這些對象將有多少種獨特的交互形式?每種類型的對像都可以與 20 種其他類型的對象進行獨特的交互(我們還計算了與相同類型對象的交互)。換句話說,您需要為 20 x 20 = 400 次交互編寫代碼!如果唯一對像類型的數量不是 20,而是 100,那麼交互的數量可能是 10,000!

“哇!現在我明白為什麼編程是這麼難的工作了。”

“這很簡單。多虧了很多抽象。並且在很大程度上要歸功於接口的多重繼承。”

如果角色和/或能力交互而不是對象本身,我們通常可以簡化對象交互。正如我們已經知道的那樣,當類實現某個接口時,可以很容易地將能力添加到該類中。

在編寫大型程序時,開發人員通常從一開始就這樣做:

1)確定所有能力/角色。

2)定義這些角色之間的交互。

3)然後簡單地為所有班級分配角色。

“也許是一個例子?”

“當然。讓我們看看卡通片《貓和老鼠》中的角色。”

Java代碼 描述
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 接口)追逐 «one you can eat» 並逃離 «one who can eat you»。而這一切都不知道特定的對象。如果你向程序中添加更多的對象(類)並保留這些角色,它仍然可以很好地工作,控制你的對象的行為。