Classe abstraite vs Interface ?
Fermé
K-gauss
-
11 févr. 2014 à 11:53
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 13 févr. 2014 à 20:42
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 13 févr. 2014 à 20:42
A voir également:
- Classe abstraite vs Interface ?
- Udp vs tcp - Guide
- Ddr3 vs ddr3l ✓ - Forum Matériel & Système
- Naruto vs pain épisode netflix ✓ - Forum Cinéma / Télé
- Mo vs mb ✓ - Forum Matériel & Système
- Common interface - Forum TV & Vidéo
3 réponses
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
11 févr. 2014 à 19:49
11 févr. 2014 à 19:49
Une classe c'est une hiérarchie verticale, tu ne peux hériter que d'une classe.
Une interface c'est des propriétés transverses, tu peux en implémenter plusieurs.
Exemple :
Une interface c'est des propriétés transverses, tu peux en implémenter plusieurs.
Exemple :
class abstract Animal { } interface Comestible { Animal[] predateurs(); } interface Nageur { } class Poisson extends Animal implements Comestible, Nageur { }
walidovich_85
Messages postés
608
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
25 octobre 2015
73
Modifié par walidovich_85 le 13/02/2014 à 20:16
Modifié par walidovich_85 le 13/02/2014 à 20:16
Bonsoir,
enfaite, KX a donné un exemple de la différence entre les classes abstraites et les interfaces.
Pratiquement, les classes sont des structures qui peuvent définir des objets, c a dire, des propriétés (Attributs) et des comportements (Méthodes). Alors une classe abstraite une classe tte a fait normale mais qu'on ne peut pas en instancier des objets: y'a des tigres, des chats en monde réel, mais il n'a pas physiquement un Animal (alors Animal est une abstraction des etres vivants).
Pour les interfaces, pour mon point de vue, elles sont un groupement des définitions des méthodes qui vont être utilisées dans des classes. Exp: si un animal (requin) a pu évolué pour devenir aussi volant, alors il aura tts les comportements des etre vivants volant. La solution la plus facile est d'implémenter l'interface "volant", car le requin hérite de la classe abstraite Poisson (alors il ne peut pas hériter de la classe mère des oiseaux), mais il peut implémenter plusieurs interfaces.
Entre autre c comme ça que je vois l'utilité des interfaces.
Bonne chance
Being normal is boring... being geek is interesting
enfaite, KX a donné un exemple de la différence entre les classes abstraites et les interfaces.
Pratiquement, les classes sont des structures qui peuvent définir des objets, c a dire, des propriétés (Attributs) et des comportements (Méthodes). Alors une classe abstraite une classe tte a fait normale mais qu'on ne peut pas en instancier des objets: y'a des tigres, des chats en monde réel, mais il n'a pas physiquement un Animal (alors Animal est une abstraction des etres vivants).
Pour les interfaces, pour mon point de vue, elles sont un groupement des définitions des méthodes qui vont être utilisées dans des classes. Exp: si un animal (requin) a pu évolué pour devenir aussi volant, alors il aura tts les comportements des etre vivants volant. La solution la plus facile est d'implémenter l'interface "volant", car le requin hérite de la classe abstraite Poisson (alors il ne peut pas hériter de la classe mère des oiseaux), mais il peut implémenter plusieurs interfaces.
Entre autre c comme ça que je vois l'utilité des interfaces.
Bonne chance
Being normal is boring... being geek is interesting
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
13 févr. 2014 à 20:42
13 févr. 2014 à 20:42
Remarque : en pratique on se sert également des interfaces pour manipuler des objets dont on ne sait pas quelle classe se cache derrière.
Par exemple si je fais :
Je n'ai a priori aucune idée du type de l'objet list, mais c'est une information dont je n'ai pas besoin, je manipule directement les méthodes proposées par l'interface List et uniquement celles-ci, c'est largement suffisant.
L'interface est le "contrat" de ce que doit faire l'objet, une méthode (comme Arrays.asList dans l'exemple) qui renvoie une interface en type de retour garantie que l'on n'utilisera pas d'autres méthodes de l'objet que celles définies par l'interface.
Cela permet par exemple de changer du jour au lendemain le type de l'objet renvoyé par la méthode sans conséquence si on continue de respecter le contrat.
Par exemple si je fais :
import java.util.Arrays; import java.util.List; public class Test { public static void main(String[] args) { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); System.out.println(list); // [1, 2, 3, 4, 5] } }
Je n'ai a priori aucune idée du type de l'objet list, mais c'est une information dont je n'ai pas besoin, je manipule directement les méthodes proposées par l'interface List et uniquement celles-ci, c'est largement suffisant.
L'interface est le "contrat" de ce que doit faire l'objet, une méthode (comme Arrays.asList dans l'exemple) qui renvoie une interface en type de retour garantie que l'on n'utilisera pas d'autres méthodes de l'objet que celles définies par l'interface.
Cela permet par exemple de changer du jour au lendemain le type de l'objet renvoyé par la méthode sans conséquence si on continue de respecter le contrat.