0 votes

L'héritage et l'endroit où déclarer un objet universel prévu

J'ai un Player qui hérite d'une classe ArmedHumanoids qui hérite à son tour d'une classe Humanoids classe.

Où et quand dois-je créer le Player afin qu'il soit accessible dans toutes mes autres classes - par exemple, un objet selectPlayerRace classe ?

Je sais qu'en étendant la Player elle devient accessible, mais je suis contrarié parce que toutes mes autres classes étendent la classe JFrame . Il ne peut y avoir qu'une seule extension, pas deux.

Pour l'instant, le NetBeansIDE se plaint de ne pas pouvoir localiser le fichier Player lorsque je le codifie dans selectPlayerRace après avoir créé le Player dans mon Main classe.

Évidemment, il est plus heureux lorsque je crée le fichier Player dans l'objet selectPlayerRace mais je ne peux pas accéder à la classe Player dans toutes mes autres classes car il est interne à la classe selectPlayerRace .

En Player est destiné à être un objet universel accessible dans toutes mes autres classes.

4voto

Zach Scrivena Points 15052

En Player o universel accessible dans toutes mes autres autres classes.

Pourquoi ne pas adopter ce texte ? Player dans le constructeur des autres classes ou dans les méthodes que vous appelez ?

2voto

codemeit Points 9327

Vous pouvez créer un objet de votre classe Player et le transmettre aux autres objets via, par exemple, un constructeur ou une méthode acceptant le type 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();
  }

}

0voto

Energiequant Points 790

Il semble que vous soyez à la recherche d'un static déclaration ici. Si je comprends bien, vous voulez obtenir un accès global à une instance de Player, mais vous n'avez pas besoin de extend une autre classe ou implement une interface pour le faire (ce qui signifie que vous n'avez pas besoin d'hériter d'un comportement, vous voulez juste avoir accès à un objet). Vous pourriez stocker l'instance de Player à laquelle vous voulez accéder static par exemple dans un PlayerManagement classe. Vous y placez ensuite une méthode statique comme getPlayer(String playerName) qui synchronise l'accès à son tableau/vecteur/quoi que ce soit contenant tous les objets Player et renvoie ensuite l'objet en question (ou null si elle n'est pas trouvée). Vous pouvez lier vos classes humanoïdes à PlayerManagement et vice versa.

Peut-être voulez-vous aussi un Player interface . Vous pouvez implémenter autant d'interfaces que vous le souhaitez tout en n'étendant qu'une seule autre classe, mais vous devez réimplémenter toutes les fonctionnalités puisque vous ne pouvez pas écrire de code dans une interface, mais seulement définir les attributs/méthodes qu'une classe implémentant cette interface doit fournir.

0voto

starblue Points 29696

Il n'est pas bon d'avoir des objets globaux, parce que cela

  • rendra les tests plus difficiles, et

  • pose des problèmes lorsqu'il est nécessaire d'avoir plus d'une instance.

Il est préférable de donner des références à d'autres objets lors de la construction (c'est ce qu'on appelle l'injection de dépendances) sur la base du besoin de savoir ou, le cas échéant, de passer des références par paramètre.

Cela dit, consultez le modèle de conception Singleton.

0voto

Clint Points 5864

Cela ressemble à un modèle unique.

public class Player extends ArmedHumanoid {

  private static Player instance = new Player();

  private Player() {}

  public static Player getIntstance() {
    return instance
  }

}

Ensuite, n'importe quelle classe peut appeler Player.getInstance() pour accéder à l'objet Player.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X