Наследование и где объявлять объект, предназначенный для всеобщего назначения


0

У меня есть класс Player, который наследуется от класса ArmedHumanoids, который наследует, в свою очередь, от класса Humanoids.

Где и когда я должен создать объект Player, чтобы он был доступен во всех моих других классах - например, класс selectPlayerRace?

Я знаю, что, расширяя класс Player, он становится доступным, но мне мешают, потому что все мои другие классы расширяются JFrame. Может быть только одно расширение, а не два.

На данный момент NetBeansIDE жалуется, что не может найти Player объект, когда я код для него в selectPlayerRace, после создания Player объекта в моем Main классе.

Очевидно, что счастливее, когда я создаю Player объект в selectPlayerRace классе, но я не могу получить доступ к Player объекту во всех моих других классах, это является внутренним selectPlayerRace.

Объект 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

Это именно то, что мне нужно. Он отлично работает в моем коде. Например, я могу вызвать Player.getInstance.classType = «Маг» в классе selectClassType. Большое вам спасибо за решение этой проблемы для меня. 23 фев. 092009-02-23 07:47:47


0

Похоже, что вы ищете объявление static здесь. Насколько я понимаю, вы хотите получить глобальный доступ к некоторому экземпляру Player, но не нужно будет extend какого-либо другого класса или implement для этого интерфейса (что означает, что вам не нужно наследовать какое-либо поведение, вам просто нужен доступ к один объект). Вы можете сохранить экземпляр Player, к которому хотите получить доступ static, например. в классе PlayerManagement. Затем вы помещаете в него статический метод, например getPlayer(String playerName), который синхронизирует доступ к его массиву/Vector/независимо от всех объектов Player, а затем возвращает объект (или null, если не найден). Вы можете связать свои гуманоидные классы с PlayerManagement и наоборот.

Возможно, вам также нужен проигрыватель interface. Вы можете реализовать столько интерфейсов, сколько хотите, но только расширить один другой класс, но вам нужно переопределить все функциональные возможности, так как вы не можете писать какой-либо код в интерфейс, просто определите, какие атрибуты/методы должен реализовать класс, реализующий этот интерфейс.

  0

Oooookay ?! Какие-нибудь комментарии, почему это было проголосовано? Я не понимаю? 22 фев. 092009-02-22 12:05:17


2

Вы можете создать объект своего класса 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

Это плохой стиль, чтобы иметь глобальные объекты, потому что это

  • сделает тестирование более трудным, и

  • вызовет проблемы, когда возникает необходимость иметь более одного экземпляров.

Лучше давать ссылки на другие объекты, на строительстве (это называется инъекцией зависимостей) на основе служебной необходимости знать, или в случае необходимости передавать ссылки параметра.

Это, пожалуйста, посмотрите на шаблон дизайна Синглтона.

  0

Посмотрите на антиотест синглтона и сделайте заметку, чтобы никогда не использовать его. 22 фев. 092009-02-22 12:00:17


4

Объект Player предназначен быть универсальный объект доступен во всех моих других классов.

Почему бы не просто передать этот объект Player в конструкторе других классов или в методах, которые вы называете?