2009-02-22 25 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对象传递给其他类的构造函数或调用的方法?