367 votes

Polymorphisme vs vs la substitution surcharge

En termes de Java, lorsque quelqu'un demande :

Quel est le polymorphisme ?

La surcharge ou la substitution serait une réponse acceptable ?

Selon moi, il y a un peu plus à elle que cela. Si vous avez eu une classe de base abstraite qui définit une méthode avec aucune implémentation et que vous avez défini cette méthode dans la classe sup, est ce toujours premier ?

Je pense que la surcharge n’est pas la bonne réponse à coup sûr.

928voto

Chris Cudmore Points 11133

La façon la plus claire d'exprimer le polymorphisme est par l'intermédiaire d'une classe de base abstraite (ou l'interface)

public abstract class Human{
   ...
   public abstract void goPee();
}

Cette classe est abstraite car l' goPee() méthode n'est pas définissable pour les Humains. Il n'est définissable pour les sous-classes de sexe Masculin et de sexe Féminin. Aussi, l'Homme est un concept abstrait — Vous ne pouvez pas créer un être humain qui n'est ni Mâle ni Femelle. Il faut que ce soit l'un ou l'autre.

Nous avons donc reporter la mise en oeuvre à l'aide de la classe abstraite.

public class Male extends Human{
...
    @Override
    public void goPee(){
        System.out.println("Stand Up");
    }
}

et

public class Female extends Human{
...
    @Override
    public void goPee(){
        System.out.println("Sit Down");
    }
}

Aujourd'hui nous pouvons dire toute une salle pleine de l'Homme pour aller faire pipi.

public static void main(String args){
    ArrayList<Human> group = new ArrayList<Human>();
    group.add(new Male());
    group.add(new Female());
    // ... add more...

    // tell the class to take a pee break
    for (Human person : group) person.goPee();
}

L'exécution de cette donnerait:

Stand Up
Sit Down
...

97voto

The Digital Gabeg Points 1581

Le polymorphisme est la capacité d'une instance de classe à se comporter comme si elle était une instance d'une autre classe dans son arborescence d'héritage, le plus souvent un de ses ancêtre des classes. Par exemple, en Java, toutes les classes héritent de l'Objet. Par conséquent, vous pouvez créer une variable de type Objet et de l'attribuer à une instance d'une classe.

Un override est un type de fonction qui se trouve dans une classe qui hérite d'une autre classe. Une remplacer la fonction "remplace" une fonction héritée de la classe de base, mais le fait d'une façon telle qu'il est appelé même lorsqu'une instance de sa classe est de faire semblant d'être un autre type à travers le polymorphisme. Se référant à l'exemple précédent, vous pouvez définir votre propre classe et de remplacer la fonction toString (). Parce que cette fonction est héritées de l'Objet, il sera toujours disponible si vous copiez une instance de cette classe dans une variable de type Object. Normalement, si vous appeler toString() dans la classe alors que c'est de faire semblant d'être un Objet, la version de toString qui aura pour effet de feu est celui défini sur l'Objet lui-même. Cependant, parce que la fonction est une substitution, à la définition de toString() de votre classe est utilisée lorsque l'instance de classe est vrai type est caché derrière le polymorphisme.

La surcharge est l'action de définir plusieurs méthodes avec le même nom, mais avec des paramètres différents. Elle est indépendants de la substitution ou de polymorphisme.

51voto

manoj Points 71

Le polymorphisme signifie plus d'une forme, d'un même objet l'exécution des différentes opérations en fonction de l'exigence.

Le polymorphisme peut être atteint par l'utilisation de deux façons, ceux qui sont

  1. La redéfinition de méthode
  2. La surcharge de méthode

La surcharge de méthode , il faut écrire deux sont ou plusieurs méthodes de la même classe en utilisant le même nom de méthode, mais le passage des paramètres est différent.

La redéfinition de méthode signifie que nous utilisons les noms de méthode dans les différentes catégories,ce qui signifie classe parent méthode est utilisée dans la classe enfant.

En Java, pour atteindre le polymorphisme d'une super-classe de référence de la variable peut contenir de la sous-classe de l'objet.

Pour atteindre le polymorphisme chaque développeur doit utiliser la même méthode noms dans le projet.

45voto

Patrick McElhaney Points 22093

Effectivement, les deux sont utilisés pour réaliser le polymorphisme.

  • Vous pourriez avoir une méthode dans une classe qui est substituée à une ou plusieurs sous-classes. La méthode fait des choses différentes selon laquelle la classe a été utilisé pour instancier un objet.
  • Vous pourriez également avoir une méthode qu’il surchargé avec deux ou plusieurs séries d’arguments. La méthode fait des choses différentes, basées sur l’ou les types des arguments passés.

41voto

Mark A. Nicolosi Points 11859

Voici un exemple de polymorphisme chez le pseudo-C# / Java :

La fonction Main ne connaît pas le type de l’animal et dépend comportement d’une implémentation particulière de la méthode MakeNoise().

Edit : On dirait que Brian m’a battu à coup de poing. Drôle, nous avons utilisé le même exemple. Mais le code ci-dessus devrait aider à clarifier les concepts.

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