天天看點

《Android遊戲開發詳解》——第3章,第3.5節繼承

本節書摘來自異步社群《android遊戲開發詳解》一書中的第3章,第3.5節繼承,作者 【美】jonathan s. harbour,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

3.5 繼承

android遊戲開發詳解

在設計對象的分類的時候,你可能會發現另一種叫作繼承(inheritance)的模式,它給了我們更多的控制權。繼承描述了這樣一種現象,一個類繼承了另一個類中的變量和方法。在這種情況下,繼承者稱為子類(subclass,或孩子類),而祖先稱作超類(superclass,或者父類)。

使用繼承比使用接口的優點在于,可以具備複用代碼的能力。還記得吧,實作了一個接口的每一個類,都必須針對接口中聲明的每一個抽象方法提供一個完整的實作。使用前面小節的例子,這意味着,king、villain、professor和sushichef,都必須擁有它們自己的eat()、walk()和urinate()方法。在這種情況下,繼承很強大,因為它允許相似的類共享方法和變量。我們将使用一個假想的角色扮演遊戲的例子來說明這一點。

在建立一款角色扮演遊戲的時候,你可能有一個名為hero的類來表示玩家角色,如程式清單3.10所示。

程式清單3.10 hero類

在建立了hero之後,你随後決定要讓自己的rpg和競争者有所區分,那就實作一個獨特的類系統,其中玩家能夠在此前沒有見過的warrior、mage和rogue類之間做出選擇。

接下來,和任何值得尊敬的面向對象程式員會做的一樣,你為每一種角色類型建立了一個單獨的java類,因為warrior、mage和rogue中的每一個都應該具有無法想象的強大而獨特的能力。你還決定,既然所有的角色類都是泛型的hero類的第一個和最重要的擴充,它們每一個都應該擁有程式清單3.10中的hero類的所有變量和方法。這就是繼承的用武之地。

來看一下程式清單3.11到程式清單3.13。

程式清單3.11 warrior類

注意,我們使用關鍵字extends表示繼承。這是合适的,因為所有這3個類都是超類hero的擴充。在繼承中,每個子類都針對超類中的所有非私有的變量和方法,接受它們自己的版本(程式清單3.10中的protected變量,類似于private變量,因為外部類是無法通路它們的;然而,和private變量不同,在繼承中,子類是可以通路它們的)。

在應用多态的時候,繼承的好處最明顯,多态允許我們在如下所示的一個方法中使用hero的任何子類。

繼續閱讀