Classe abstraite vs Interface ?

Fermé
K-gauss - 11 févr. 2014 à 11:53
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 13 févr. 2014 à 20:42
Salut
Je vois pas la difference entre classe abstraite et une interface !
dans quel on utilise une classe abstraite ?meme chose pr une interface ? et merci

3 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
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 :

class abstract Animal
{
}

interface Comestible
{
    Animal[] predateurs();
}

interface Nageur
{
}

class Poisson extends Animal implements Comestible, Nageur
{
}
0
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
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
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
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 :

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.
0