2012-03-27 27 views
0

我正在寫一個小型的java遊戲,其中有各種類型的怪物,一對電腦控制的玩家和一個人爲控制的玩家。遊戲世界是一個相當基本的2D網格。網格聲明爲期望Humanoid對象。那就是Humanoid [][] grid。但是,對於每種類型的角色,人形編碼的各個部分都需要被覆蓋。如何調用某個類的方法(繼承)

什麼即時通訊有一些麻煩是我如何可以調用人類具體的移動方法,如果代碼期望人型生物,以及如何檢查運動邊界。

如果有什麼不清楚的地方,請告訴我。

感謝

注:我的人形類沒有一招法,由於這樣的事實,即時通訊這樣的類,它不允許任何

+0

你根本不用做任何事情,google'Java多態性和繼承' – 2012-03-27 00:10:30

回答

1

您不必做任何事情。如果您有Humanoid類,move方法和Human類延伸自Humanoid,使用它自己的move方法,當您調用move時,將使用人類的版本(如果您在人類實例上調用它)。

所以,如果你

Humanoid human = new Human(); 
human.move(); // Human's move is invoked 

Humanoid orc = new Orc(); 
orc.move(); // Orc's move is invoked 

運行時自動調用相應的移動方法。

+0

謝謝。但是我的人形類沒有移動方法,也不允許。 – user979616 2012-03-27 00:25:42

+0

你可以創建一個人形生物的下級,然後讓你的所有生物使用**那個**子類,而不是人形生物? – hvgotcodes 2012-03-27 00:27:58

+0

不幸的是。我認爲重要的一點是,在我調用這些方法之前我必須先施放。但我只是困惑如何做到這一點。我認爲我首先通過網格進行循環,直到找到某個人爲實例(例如),然後進行投射然後調用該方法。但這似乎是一個痛苦,做 – user979616 2012-03-27 00:32:07

0

如果覆蓋子類中的方法,則不必執行任何特殊的操作即可調用它們。只需調用Humanoid變量的方法,以及實例的實際類,那就是將要運行的方法的版本。

您可能希望使用抽象方法使Humanoid抽象類必須在子類中定義,或者甚至可以是一個接口。但即使您使用代碼在Humanoid中定義一個方法,然後使用子類中的不同代碼重寫相同的方法,它也可以工作。當您調用的對象是子類的實例時,即使您的變量類型爲Humanoid而不是子類,該子類的方法版本也會運行。

0

繼承的一點是,你不應該知道你正在操作哪個子類。例如,假設人類和怪物共享一個名爲「Mobile」的基類,而Mobile有一個抽象方法「move」。人類可能會優先考慮走過地圖,鳥類可能會超越它飛行,而地球鯊也可能在地下游動。

事情是,你的地圖只是調用Mobile.move(),並且動作將被委託給實際的子類來完成移動。

如果你必須知道你使用的是哪個類,那麼你做錯了 - 然而有時你需要知道關於類的東西,例如,如果地形不可通過,那麼你可以調用Mobile.canFly( )來查看給定的生物是否支持飛行。後來,如果你決定人類可以通過法術飛行,你只需修改人類和其他一切正常工作,但如果你已經測試過這個類,只允許「禿鷹」,「鷹」和「龍」飛過一個障礙,那麼如果你改變它或添加它,你的代碼就會變得更加複雜。