我只是想知道,如果它是語義上正確的使用特質來建立遊戲對象。一方面,我認爲這是一個有一個關係(一個對象有組件),但另一方面,我將組件視爲組成一個對象。可以使用特質在Scala中構建遊戲組件系統嗎?
例如。你有一個GameObject。遊戲對象本身幾乎沒有任何東西,但是混入它的東西給了它更多的屬性。組件可以是HealthComponent(有健康),PhysicsComponent(模擬物理),ClickableComponent(可以點擊)。
我喜歡使用特徵的想法,因爲所有的屬性和方法都添加在原始對象上,我可以做player.getHP
而不是player.getHealthComponent.getHP
。另一方面,我發現使用特徵的命名和語義很奇怪。 trait HealthComponent extends GameObject
- 這沒有意義。 A HealthComponent
屬於遊戲對象,它不符合是關係,暗示了extend
。我是否正確地認爲特質通常被視爲父類的專門版本?如果是這樣,我會如何命名上述對象?
這樣更好,謝謝。但是,如果'Player'和'Movement'都定義了'foo'方法,那麼我怎樣才能讓它被調用(像'super'那樣工作? – ryeguy 2011-04-07 01:08:50
你不能。您可以重寫方法,但不能調用超類型的實現。如果你需要這樣做,你必須使用繼承。 – Moritz 2011-04-07 01:23:31
您可以通過使用抽象覆蓋來調用超類型的實現,而無需繼承超類型。不過,你的特徵必須從一個聲明'foo'方法的公共接口繼承。我將在一個答案中證明這一點。 – 2011-04-07 16:28:06