在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Java/ Java 提高篇(九)—–實現(xiàn)多重繼承
Java 集合細(xì)節(jié)(四):保持 compareTo 和 equals 同步
Iterator
使用序列化實現(xiàn)對象的拷貝
fail-fast 機制
關(guān)鍵字 final
Vector
HashTable
Java 集合細(xì)節(jié)(一):請為集合指定初始容量
強制類型轉(zhuǎn)換
數(shù)組之一:認(rèn)識 JAVA 數(shù)組
Java 集合細(xì)節(jié)(三):subList 的缺陷
hashCode
ArrayList
數(shù)組之二
List 總結(jié)
LinkedList
Java 提高篇(九)—–實現(xiàn)多重繼承
Java 的四舍五入
關(guān)鍵字 static
理解 Java 的三大特性之多態(tài)
抽象類與接口
集合大家族
異常(二)
Java 集合細(xì)節(jié)(二):asList 的缺陷
Map 總結(jié)
TreeSet
equals() 方法總結(jié)
Java 提高篇(十)—–詳解匿名內(nèi)部類
HashMap
Stack
詳解內(nèi)部類
TreeMap
異常(一)
詳解 Java 定時任務(wù)
HashSet
字符串
理解 Java 的三大特性之繼承
理解 Java 的三大特性之封裝
代碼塊

Java 提高篇(九)—–實現(xiàn)多重繼承

多重繼承指的是一個類可以同時從多于一個的父類那里繼承行為和特征,然而我們知道 Java 為了保證數(shù)據(jù)安全,它只允許單繼承。有些時候我們會認(rèn)為如果系統(tǒng)中需要使用多重繼承往往都是糟糕的設(shè)計,這個時候我們往往需要思考的不是怎么使用多重繼承,而是您的設(shè)計是否存在問題.但有時候我們確實是需要實現(xiàn)多重繼承,而且現(xiàn)實生活中也真正地存在這樣的情況,比如遺傳:我們即繼承了父親的行為和特征也繼承了母親的行為和特征??尚业氖?Java 是非常和善和理解我們的,它提供了兩種方式讓我們曲折來實現(xiàn)多重繼承:接口和內(nèi)部類。

一、 接口

在介紹接口和抽象類的時候了解到子類只能繼承一個父類,也就是說只能存在單一繼承,但是卻可以實現(xiàn)多個接口,這就為我們實現(xiàn)多重繼承做了鋪墊。

對于接口而已,有時候它所表現(xiàn)的不僅僅只是一個更純粹的抽象類,接口是沒有任何具體實現(xiàn)的,也就是說,沒有任何與接口相關(guān)的存儲,因此也就無法阻止多個接口的組合了。


    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()方法,繼承父類的,所以不需要顯示聲明
         */
    }

二、內(nèi)部類

上面使用接口實現(xiàn)多重繼承是一種比較可行和普遍的方式,在介紹內(nèi)部類的時候談到內(nèi)部類使的多繼承的實現(xiàn)變得更加完美了,同時也明確了如果父類為抽象類或者具體類,那么我就僅能通過內(nèi)部類來實現(xiàn)多重繼承了。如何利用內(nèi)部類實現(xiàn)多重繼承,請看下面實例:兒子是如何利用多重繼承來繼承父親和母親的優(yōu)良基因。

首先是父親 Father 和母親 Mother:


    public class Father {
        public int strong(){
            return 9;
        }
    }

    public class Mother {
        public int kind(){
            return 8;
        }
    }

重頭戲在這里,兒子類 Son:


    public class Son {

        /**
         * 內(nèi)部類繼承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

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

有關(guān)于更多接口和內(nèi)部類的詳情,請參考這里:

內(nèi)部類:Java提高篇—-詳解內(nèi)部類 接口:Java提高篇—–抽象類與接口

上一篇:List 總結(jié)下一篇:數(shù)組之二