java提高篇(九)-----實現多重繼承

   多重繼承指的是一個類可以同時從多於一個的父類那裏繼承行爲和特徵,然而我們知道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();
    }
}

複製代碼

      測試程序:

複製代碼

public class Test1 {

    public static void main(String[] args) {
        Son son = new Son();
        System.out.println("Son 的Strong:" + son.getStrong());
        System.out.println("Son 的kind:" + son.getKind());
    }

}
----------------------------------------
Output:
Son 的Strong:10
Son 的kind:6

複製代碼

      兒子繼承了父親,變得比父親更加強壯,同時也繼承了母親,只不過溫柔指數下降了。這裏定義了兩個內部類,他們分別繼承父親Father類、母親類Mother類,且都可以非常自然地獲取各自父類的行爲,這是內部類一個重要的特性:內部類可以繼承一個與外部類無關的類,保證了內部類的獨立性,正是基於這一點,多重繼承纔會成爲可能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章