je une hiérarchie de classes qui ressemble un peu à ceci:méthode d'appel de type dynamique
class Parent { }
class Child1 extends Parent {}
class Child2 extends Parent {}
class Child3 extends Parent {}
Dans une autre classe, j'ai des méthodes qui ressemble à ceci:
void doSomething(Parent p) { //default }
void doSomething(Child1 c) { //implementation for Child 1 }
void doSomething(Child2 c) { //implementation for Child 2 }
Actuellement, quand j'ai quelque chose comme ce
Parent p = new Child2();
doSomething(p);
la première méthode, doSomething(Parent)
est appelé au lieu de 0 doSomething(Child2)
Supposons que j'ai une liste d'éléments avec le type statique de Parent et un type dynamique de ChildN. Comment puis-je assurer la méthode, à condition que le type dynamique soit appelé, sans lancer. Seulement pour Child3 (pas de méthode doSomething spécifique) Je veux appeler l'implémentation par défaut.
Merci, je l'aurais fait, mais je impossible de modifier mes classes parent ou enfant – Karl
@Karl Oui, vous devrez peut-être modifier la classe parent implémenter l'interface et l'autre classe.Si ce n'est pas possible alors vous devrez peut-être vérifier en utilisant instanceof qui dégraderait les performances. – Beniton