Pas du tout. La JVM détermine au moment de l'exécution en fonction du type exact d'un objet, quelle méthode invoquer.
Votre joli petit casting ne sert à rien. Parce que vous ne pouvez pas changer le type d'exécution d'une référence par un casting !
Une solution serait d'avoir quelque chose comme :
public String superToString() {
return super.toString();
}
à l'intérieur de ces classes, et d'invoquer cette méthode explicitement. Alternativement, la ligne qui fait actuellement ce cast pourrait être remplacée par return super.toString()
bien sûr.
Mais alors, surtout l'option 1 ne ferait qu'ajouter "le pire au pire". Comme dans : le contrat de toString()
est de retourner une chaîne de caractères.
Tout simplement jamais, jamais écrire toString()
des méthodes qui
- nécessite un travail intensif pour se produire ou
- peut lancer une exception !
Ver Comment utiliser la méthode toString en Java ? pour d'autres réflexions.
Sérieusement : dans tout projet de grande envergure, vous avez zéro contrôler quand/à quelle fréquence/de quelle manière toString()
est appelé sur vos objets. Vous devez vous assurer que ces appels reviennent rapidement, renvoient des informations raisonnables et ne lèvent jamais d'exception.