8
votes

Comment remplacer une méthode en Java, mais une fonctionnalité partielle de la méthode des parents

Cette question a été posée pendant l'entrevue d'emploi, Java Development, poste étudiant

class B extends A {
   public void execute() {
      //some code goes here 
   }
}


0 commentaires

3 Réponses :


10
votes

Ceci est un exemple de modèle de modèle . La superque abstraite A impose la structure à la transformation en faisant les pièces "standard" - dans ce cas, imprimant quelque chose - puis invoque les implémentations concrètes de la sous-classe pour effectuer le traitement réel / spécifique:

abstract class A implements someIterface {
   public void Execute() {
      System.out.println("start process"):
      doExecute();
   }

   protected abstract void doExecute();
}

class B extends A {
    protected void doExecute() {
        // some code goes here
    }
}
  • la méthode à appeler exécuter code> au lieu de exécuter code> li>
  • L'interface à appeler Quelqu'unInterface code> au lieu de Quelqu'unInterface code> li>
  • l'interface pour avoir la méthode exécuter code> li> ul> p>


3 commentaires

N'est pas modèle de la méthode modèle ??


Merci pour la solution, mais le nouveau développeur de la question a été invité à écrire une méthode Exécuter dans la classe B, d'une manière que lorsque Exécuter sera appelé "Démarrer le processus" devrait être imprimé. Votre solution fait la même fonctionnalité mais pas comme décrit dans les termes. Toute autre idée?


@Umnyobe Bon appel. Oui Modèle Modèle s'adapte mieux que le modèle de stratégie (bien que la stratégie s'adapte un peu, c'est un ajustement médiocre par rapport au modèle - j'ai mis à jour la réponse)



0
votes

Pardon.

Je suis principalement un développeur .NET, alors ne soyez donc pas trop coupé avec moi, mais j'ai essayé un sniplet dans C # et a fait quelque chose comme ça:

Données d'entrée Nous avons

 xxx

la chose est (et ceci devrait travailler dans java aussi), que si j'écris un code, comme si j'écris un code, comme si j'écris: xxx

Il imprimera comme demandé et attendu "Démarrer processus ", cause inter.exexute appellera sa version implémentée (si présente dans a ) même si réelle type est B .

espère que cela aide.


1 commentaires

Je crois en C #, vous devez dire spécifiquement le remplacement de la signature de la méthode, sinon le comportement par défaut est simplement de "masquer" la mise en œuvre.



2
votes

Super appelle la fonctionnalité de votre classe mère.

from class A
from class B


1 commentaires

Le nouveau développeur qui écrit la méthode d'exécution ne sait pas qu'il devrait utiliser super. Ce code fera le travail, mais ce n'est pas ce à quoi on m'a demandé d'écrire.