多重繼承指的是一個類可以同時從多於一個的父類別那裡繼承行為和特徵,然而我們知道 Java 為了保證資料安全,只允許單繼承。
有些時候我們會認為如果系統中需要使用多重繼承,那往往都是糟糕的設想,這時開發人員往往需要思考的不是怎麼使用多重繼承,而是他的設計是否存在問題。但是,有時候開發人員確實需要實現多重繼承,而且現實生活中真正地存在這樣的情況,例如遺傳,我們既繼承了父親的行為和特徵,也繼承了母親的行為和特徵。
Java 提供的兩種方法讓我們實現多重繼承:介面和內部類。
例 1
本節我們以生活中常見的遺傳例子進行介紹,如兒子(或者女兒)是如何利用多重繼承來繼承父親和母親的優良基因的。
1)建立 Father 類,在該類中新增 strong() 方法。程式碼如下:
public class Father {
public int strong() {
// 強壯指數
return 9;
}
}
2)建立 Mother 類,在該類中新增 kind() 方法。程式碼如下:
public class Mother {
public int kind() {
// 友好指數
return 8;
}
}
3)重點在於兒子類的實現,建立 Son 類,在該類中通過內部類實現多重繼承。程式碼如下:
public class Son {
// 內部類繼承Father類
class Father_1 extends Father {
public int strong() {
return super.strong() + 1;
}
}
class Mother_1 extends Mother {
public int kind() {
return super.kind() - 2;
}
}
public int getStrong() {
return new Father_1().strong();
}
public int getKind() {
return new Mother_1().kind();
}
}
上述程式碼定義兩個內部類,這兩個內部類分別繼承 Father(父親)類和 Mother(母親)類,且都可以獲取各自父類別的行為。這是
內部類一個很重要的特性:內部類可以繼承一個與外部類無關的類,從而保證內部類的獨立性。正是基於這一點,多重繼承才會成為可能。
4)建立 Test 類進行測試,在 main() 方法中範例化 Son 類的物件,然後分別呼叫該物件的 getStrong() 方法和 getKind() 方法。程式碼如下:
public class Test {
public static void main(String[] args) {
Son son = new Son();
System.out.println("Son 的強壯指數:" + son.getStrong());
System.out.println("Son 的友好指數:" + son.getKind());
}
}
執行上述程式碼,輸出結果如下:
Son 的強壯指數:10
Son 的友好指數:6
從實現程式碼和輸出結果可以發現,兒子繼承父類別,變得比父親更加強壯;同時也繼承了母類,只不過友好指數下降。