2009-02-22 68 views
0

我有一個Player類,它繼承自ArmedHumanoids類,它繼承自Humanoids類。繼承以及在哪裏聲明預期的通用對象

何時何地應該創建Player對象,以便在所有其他類中都可以訪問 - 例如,selectPlayerRace類?

我知道,通過擴展Player類,它變得可以訪問,但我受挫,因爲我所有的其他類擴展了JFrame。只能有一個擴展名,而不是兩個。

目前的NetBeansIDE抱怨說,它無法找到Player對象時,我在selectPlayerRace爲其編寫代碼,在我的Main類創建Player對象之後。

很顯然,這是快樂,當我創建的selectPlayerRacePlayer對象,但後來因爲它是內部selectPlayerRace我不能訪問我的所有其他類的Player對象。

Player對象旨在成爲所有其他類中可訪問的通用對象。

回答

0

這聽起來像是單身模式。

public class Player extends ArmedHumanoid { 

    private static Player instance = new Player(); 

    private Player() {} 

    public static Player getIntstance() { 
    return instance 
    } 

} 

然後任何類都可以調用Player.getInstance()來訪問Player對象。

+0

這正是我需要的解決方案。它在我的代碼中完美工作。例如,我可以在selectClassType類中調用Player.getInstance.classType =「Mage」。非常感謝你爲我解決這個問題。 – elwynn 2009-02-23 07:47:47

0

這聽起來像你正在尋找這裏的static聲明。據我瞭解,你想獲得一個球員的一些實例的全球訪問,但不需要extend某些其他類或implement某些接口這樣做(這意味着你不必繼承任何行爲,你只需要訪問一個對象)。您可以存儲您想要訪問的播放器實例staticPlayerManagement類中。然後你在其中放入一個靜態方法,如getPlayer(String playerName),它同步對其數組/ Vector /任何包含所有Player對象的訪問,然後返回有問題的對象(如果未找到則返回null)。你可以將你的人形類連接到PlayerManagement中,反之亦然。

也許你還想要一個球員interface。您可以根據需要實現儘可能多的接口,但只能擴展一個其他類,但由於不能將任何代碼寫入接口,因此必須重新實現所有功能,只需定義實現該接口的類必須提供的屬性/方法。

+0

Oooookay ?!任何評論爲什麼這已被低估?我不明白嗎? – Energiequant 2009-02-22 12:05:17

2

您可以創建一個Player類的對象,並通過它將其傳遞給其他對象。接受Player類型的構造函數或方法。

public class Entry 
{ 
    public static void main(string[] args) 
    { 
     // initialize a player object 
     Player player=new Player("elwynn"); 
     // initialize some other object which requires player object. 
     // since player object needs to be accessed within foo. 
     Foo foo = new Foo(player); 
     // you are about to use player object within foo. 
     foo.MakePlayerPlay(); 
    } 
} 

public class Foo 
{ 

    Player player; 
    public Foo(Player p) 
    { 
    this.player = p; 
    } 

    public void MakePlayerPlay() 
    { 
    // you are using player object here 
    // which is the same instance you created 
    // within main() in Entry class. 
    if(this.player!=null) this.player.play(); 
    } 

} 
0

這是不好的風格有全局對象,因爲這

  • 將會使測試更加困難,而當出現需要有一個以上的

  • 會引起問題實例。

這是更好地給建設其他對象的引用(這叫做依賴注入),在有需要時方知的基礎上,或在適當情況下通過參數來傳遞引用。

這就是說,查看Singleton設計模式。

+0

查找單例反模式,並記下永遠不要使用它。 – 2009-02-22 12:00:17

4

Player對象預期在所有我 其他類別 通用對象訪問。

爲什麼不把這個Player對象傳遞給其他類的構造函數或調用的方法?