多態初識

    最近產品升級,有時間好好整理一下最近的學習內容。翻了翻書籍,對一些經常使用但是理解不透徹的東西整理下。首先是多態。

多態是面試經常遇到的一個問題,不過不得不說,很多書籍對多態的敘述實在是太爛了,爛到我現在都記不住什麼是多態。

多態:不同對象可以執行相同的動作,不過需要他們自己來實現代碼來執行。

舉個例子:(引用自《大話設計模式》)京劇——以前都是子承父業,代代相傳的技術。現在一對父子就是從事京劇的父子。父親是一位京劇藝術大師,兒子從小學習京劇,模範父親惟妙惟肖。有一天,父親病了,但是預定的演出卻無法推遲,那麼怎麼辦?由於京劇需要化妝上臺,所以兒子代替老子上臺演出了。這裏注意幾點:1、子類以父類的身份出現,兒子代替父親出演,化妝之後就是以父親的身份演出。2、子類工作時以自己的方式實現,兒子模仿父親在好,終究不是父親,兒子只能以自己的理解演繹父親。3、子類以父類的身份出現時,子類的特有屬性方法不可用。兒子也許會父親不懂的絕活,但是在以父親的身份演出的時候,這些東西是絕對不能變現出來的。如果有別的兒子,也可以代替父親演出,道理是一樣的。這就是多態。

要理解多態,那麼還需要虛方法方法重寫。

爲了使子類完全解體來自父類的成員,需要將父類的成員必須是聲明爲虛擬的。

子類通過使用關鍵字overwrite可以將父類實現替換爲自己的實現,這就是方法重寫。

 

要想完全理解多態,不去研究設計模式是無法做到的。舉個例子吧。

假設我們做個程序,叫聲比賽,有貓狗蟲等多中動物。但是我們不知道一共有多少種動物。這時候如何設計代碼?

首先我們建立一個類叫animal,animal包含動物的普遍屬性。其中有一個方法叫shout()。動物都會叫,單叫聲確實不一樣的。於是我們將shout()設置爲虛擬,然後對存在的每一種動物建立一個類,例如貓類cat,在cat中複寫shout(),那麼就能實現貓的叫聲了。

class Animal{

...........

    public virtual String shout(){

        ruturn "";

    }

}

class cat{

..........

   public overwrite String shout(){

        return "瞄";

   }

}

這樣不同的對象就可以執行相同的動作,不過是通過他們自己來實現的。

另外多態的規則就是:不論對象是否被轉化爲父類,都只有執行繼承鏈末端的方法執行。

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