Envoyé par
mesken
1) Tout ce que je fais avec une classe abstraite, je le fais avec une classe simple que je décide de ne pas instancier et là donc je me demande l'importance du mot clé Abstract... si ce n'est laisser le refus de l'instanciation au compilateur ?
Ca n'a en général pas trop d'intéret de déclarer abstract un classe qui n'a aucune méthode abstraite, car elle est utilisable en l'état
2) En dehors du faite que je peux déclarer des constantes 'globale' dans mon interface et en bénéficier dans tout le code, du fait qu'une classe peut implémenter plusieurs interfaces et enfin à cause du polymorphisme, Je ne vois pas leur importance quant-à 'non-répétition du code
Aucun intéret, le but et des interfaces et qu'une partie du code puisse utiliser n'importe quelle classe l'implémentant. C'est là qu'on gagne en terme de code puisqu'on ne dois pas jouer avec des 'if machin instance of truc faire ceci, sinon faire cela, ). De plus on peut implémenter plusieurs interfaces, mais étendre une seul classe.
Si demain je me rends compte dans ma conception qu'une seconde méthode améliorerai l'application que ferais-je ?
Dans l'état actuel des choses en java, l'implémenter 50 fois. Si cette méthode peut raisonnablement se baser sur les autres méthodes existantes, on peux faire ce genre de chose dans une classe utilitaire:
public static boolean faireUnTruc(Int1 linterface){return linterface.a() && linterface.b();}
et 50 fois:
1 2
|
public boolean faireUnTruc(Int1 linterface){return utilitaire.faireUnTruc(this);} |
Cette impossibilité de fournir dans l'interface une implémentation par défaut est un réel blocage en java, sur lequel des propositions d'amélioration existent, mais qu'on ne verra pas apparaitre avant java 8. C'est d'ailleurs une des raisons qui font que l'api Collection de java n'a plus bougé depuis des années, toutes les implémentation se casseraient la gueule car elle n'implémenteraient pas les nouvelle méthodes
Je sais que je peux créer une seconde interface Int2 avec la méthode M2
C'est la solution apportée dans swing pour améliorer l'interface Graphics, une interface Graphics2D qui l'etend et plein de instanceof dans le code, c'est au final pas génial non plus.
Partager