多重繼承指的是一個類別可以同時從多於一個的父類別繼承行為和特徵,然而我們知道Java為了保證資料安全,它只允許單一繼承。有些時候我們會認為如果系統中需要使用多重繼承往往都是糟糕的設計,這個時候我們往往需要思考的不是怎麼使用多重繼承,而是您的設計是否存在問題.但有時我們確實是需要實現多重繼承,而且現實生活中也真正存在這樣的情況,例如遺傳:我們即繼承了父親的行為和特徵也繼承了母親的行為和特徵。可幸的是Java是非常和善和理解我們的,它提供了兩種方式讓我們曲折來實現多重繼承:介面和內部類別。
一、 接口
在介紹接口和抽象類的時候了解到子類只能繼承一個父類,也就是說只能存在單一繼承,但是卻可以實現多個接口,這就為我們實現多重繼承做了鋪墊。
對於接口而已,有時候它所表現的不僅僅只是一個更純粹的抽象類,接口是沒有任何具體實現的,也就是說,沒有任何與接口相關的存儲,因此也就無法阻止多個接口的組合了。
interface CanFight { void fight(); } interface CanSwim { void swim(); } interface CanFly { void fly(); } public class ActionCharacter { public void fight(){ } } public class Hero extends ActionCharacter implements CanFight,CanFly,CanSwim{ public void fly() { } public void swim() { } /** * 对于fight()方法,继承父类的,所以不需要显示声明 */ }
二、內部類別
上面使用介面實現多重繼承是一種比較可行且普遍的方式,在介紹內部類別的時候談到內部類別使的多重繼承的實作變得更加完美了,同時也明確瞭如果父類為抽象類別或具體類,那麼我就僅能透過內部類別來實現多重繼承了。如何利用內部類別實現多重繼承,請看下面實例:兒子是如何利用多重繼承來繼承父親和母親的優良基因。
首先是父親Father和母親Mother:
public class Father { public int strong(){ return 9; } } public class Mother { public int kind(){ return 8; } }
重頭戲在這裡,兒子類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類,且都可以非常自然地取得各自父類的行為,這是內部類別一個重要的特性:內部類別可以繼承一個與外部類別無關的類,保證了內部類別的獨立性,正是基於這一點,多重繼承才會成為可能。
以上就是 java提高篇(八)-----實現多重繼承的內容,更多相關內容請關注PHP中文網(www.php.cn)!