par
Sékiltoyai » 10 sept. 2007, 03:15
Le principe des interfaces, c'est que ce sont des templates auxquels doivent correspondre les classes qui implémentent ces templates. On dit d'ailleurs bien implémenter, c'est à dire que le template définit une liste de méthodes et attributs que la classe qui l'implémente doit avoir pour pouvoir être déclarée comme implémentant cette interface. D'ailleurs, on peut implémenter plusieures interfaces.
Quant aux classes abstraites, ce sont des classes "non finies", c'est à dire que le développeur a créé une classe avec une liste de méthodes et attributs dans sa classe, mais il en a laissé certaines non implémentées, ce qui signifie que n'importe qui peut reprendre le travail s'il complète cette classe. C'est pour cela d'ailleurs qu'une classe abstraite ne peut pas être instanciée, car elle n'est pas achevée, et seule une classe fille non abstraite peut l'être. Les classes abstraites sont donc destinées à être héritées de manière à faire bénéficier à plusieurs classes d'un travail commun, réuni dans une seul classe, non complète. Et on ne peut hériter que d'une classe, qu'elle soit abstraite ou non.
Après, c'est vrai qu'à l'origine, c'était la même choses, en gros les interfaces ont été introduites par java pour copier l'héritage du C++. Seulement C++ supporte l'héritage multiple (de plusieurs classes), et java ne voulait pas implémenter cette fonctionnalité qui semblait trop lourde pour les développeurs de chez sun. Mais ceci posait un problème si l'on voulait qu'une classe obéisse à plusieurs shémas de classe. Les interfaces ont donc étées inventées, pour résoudre le problème, car la gestion de l'implémentation multiple de plusieurs interfaces et beaucoup plus simple à gérer qu'un héritage multiple. Donc en définitive, on pourraît dire que les interfaces sont des classes entièrement abstraites et héritables de manière multiples, même si un développeur de chez sun vous jurera le contraire

Le principe des interfaces, c'est que ce sont des templates auxquels doivent correspondre les classes qui implémentent ces templates. On dit d'ailleurs bien implémenter, c'est à dire que le template définit une liste de méthodes et attributs que la classe qui l'implémente doit avoir pour pouvoir être déclarée comme implémentant cette interface. D'ailleurs, on peut implémenter plusieures interfaces.
Quant aux classes abstraites, ce sont des classes "non finies", c'est à dire que le développeur a créé une classe avec une liste de méthodes et attributs dans sa classe, mais il en a laissé certaines non implémentées, ce qui signifie que n'importe qui peut reprendre le travail s'il complète cette classe. C'est pour cela d'ailleurs qu'une classe abstraite ne peut pas être instanciée, car elle n'est pas achevée, et seule une classe fille non abstraite peut l'être. Les classes abstraites sont donc destinées à être héritées de manière à faire bénéficier à plusieurs classes d'un travail commun, réuni dans une seul classe, non complète. Et on ne peut hériter que d'une classe, qu'elle soit abstraite ou non.
Après, c'est vrai qu'à l'origine, c'était la même choses, en gros les interfaces ont été introduites par java pour copier l'héritage du C++. Seulement C++ supporte l'héritage multiple (de plusieurs classes), et java ne voulait pas implémenter cette fonctionnalité qui semblait trop lourde pour les développeurs de chez sun. Mais ceci posait un problème si l'on voulait qu'une classe obéisse à plusieurs shémas de classe. Les interfaces ont donc étées inventées, pour résoudre le problème, car la gestion de l'implémentation multiple de plusieurs interfaces et beaucoup plus simple à gérer qu'un héritage multiple. Donc en définitive, on pourraît dire que les interfaces sont des classes entièrement abstraites et héritables de manière multiples, même si un développeur de chez sun vous jurera le contraire :mrgreen: