L'utilisation correcte de l'interface Java

Jonathan DeLorenzo:

J'ai créé à l'origine d'une interface contenant toutes les méthodes qui seraient partagées entre deux classes, cependant, je me suis aperçu que je voulais les deux classes d'avoir les mêmes méthodes, mais ils vont se comporter différemment.

Ils auront le même type de retour, mais différents paramètres. Je ne peux pas comprendre comment mettre en œuvre, ou même si je l'ai fait comprendre comment mettre en œuvre, je ne sais pas si ce serait la bonne façon de gérer la situation

Au fond, je suis venu ici à la recherche de l'approche de l'architecture correcte à mon ce que je suis en train d'accomplir et je ne sais pas ce que cela serait. Je crois avoir 4 questions pour déterminer l'architecture de code:

  1. Est-ce une interface l'approche ici, si oui, pourquoi?
  2. Est une classe abstraite l'approche ici, si oui, pourquoi?
  3. Cela semble que ce serait un thème commun avec la POO, par ce que je veux dire ayant une fonction quoi se comporter différemment donné une classe particulière. Comment le code doit être conçu?
  4. Enfin, ma première pensée a été: « Oh, je vais passer outre la méthode dans l'une des classes », mais qui me donne un énorme mal de tête et ne fonctionne pas. Je me sens comme je n'ai jamais ce trouble en essayant de remplacer les méthodes. Est primordial une méthode à partir d'une interface plus complexe?

public interface Character {
    public void setAttack();
}

/*the setAttack method here will be set by the programmer. The 3 values 
 passed by the programmer are then stored into an array*/
public class Player implements Character {
  public void setAttack(int x, int y, int z) {

    attackArray[0] = x;
    attackArray[1] = y;
    attackArray[2] = z;
  }
}

/*the setAttack will still serve the same purpose as the setAttack in the 
 player class, however, the values will be auto generated randomly once the 
 setAttack function is called for the NPC instance.*/

/*Another thought I had is passing the function that auto generates the 3 
integer values (numGen()) as a parameter 3 times, however, I'm not sure if 
this is possible. Just a thought*/


public class NPC implements Character {
  public void setAttack(){

      for(int i = 0; i < attackArray.length; i++)
    {
        attackArray[i] = numGen();
    }
  }
}
GhostCat de Monica C.:

Il y a une idée fausse conceptuelle: ayant les mêmes méthodes signifie plus que la mise en œuvre des méthodes qui ont le même nom .

Lorsque vous utilisez le polymorphisme et les interfaces en Java, vous exprimez l'intention. Comme dans: cours de mise en œuvre des interfaces doivent fournir la « fonctionnalité » correspondant. En d'autres termes: il décrit un certain comportement.

La chose est: lorsque l'interface a foo(), et différentes classes pourrait vouloir un foo(X), et foo(Y)puis la vraie question est: ces méthodes ont plus en commun que juste le nom ?!

Dans ce cas, une solution possible serait une autre couche d'abstraction. Dans votre cas, comme:

public interface AttackParameters {
...


public interface Character {  
  public void setAttack(AttackParameters parms);

ou similaire quelque chose. L'idée est de remplacer à nouveau les détails de « spécifiques » avec une solution générique.

Sinon, vous pouvez utiliser un Map<String, Object>argument en faveur de votre setAttack()méthode. En d' autres termes: paramètres d'attaque sont identifiés par des chaînes.

C'est agréable et dynamique, mais bien, il compilera également la sécurité esquive du temps. Une version légèrement meilleure de l'approche de la carte ne serait pas utiliser des chaînes comme clés, mais certains ENUM classe.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=197194&siteId=1
conseillé
Classement