IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

différence entre hériter d'une classe abstrairte et implémenter une interface


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 47
    Points : 24
    Points
    24
    Par défaut différence entre hériter d'une classe abstrairte et implémenter une interface
    Bonjour,
    J'ai du mal à voir la différence entre :

    - étendre une classe abstraite
    et
    - implémenter une interface

    En effet dans les 2 cas on a un "contrat" car on doit réecrire toutes les méthodes...
    De plus la classe abstraite et l'interface ne peuvent être instanciés.

    La seule différence que je vois c'est que on peut implémenter plusieurs interface alors que l'on ne peux étendre qu'une seule classe abstraite...

    Pouvez vous m'éclairer ?

    Merci d'avance

  2. #2
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 562
    Points : 15 502
    Points
    15 502
    Par défaut
    Pas tout à fait pour une classe abstraite tu n'est obligé de réimplémenter que les méthodes abstraites, pas toutes comme dans le cas de l'interface.

    Par contre comme tu le dit, on peut impléménter autant d'interface que l'on souhaite, alors qu'on ne peux hériter que d'une classe.

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Citation Envoyé par rastakouair Voir le message
    En effet dans les 2 cas on a un "contrat" car on doit réecrire toutes les méthodes...
    Dans le cas d'une classe abstraite tu ne dois recoder que les méthodes abstraites.

    La classe abstraite peut ainsi proposer une implémentation par défaut ou forcer certaine implémentation (par exemple en utilisant des méthodes final qu'on ne pourra pas redéfinir). Mais cela peut être une "contrainte" pour les classe fille...


    Bien souvent dans l'API standard (ou dans d'autres API Java) tu trouveras un principe à 3 niveaux, avec :
    • Une interface qui défini le contrat général, tout en laissant l'implémentation totalement libre (exemple : java.util.List).
    • Une ou plusieurs classes abstraites, qui implémentent l'interface et proposent une implémentation de certaines méthodes (exemple : AbstractList et AbstractSequentialList).
    • Une ou plusieurs classes qui héritent des classes abstraites et proposent donc une implémentation concrètes (exemple ArrayList ou LinkedList).



    Ainsi cela laisse les développeurs totalement libre :
    • Ils peuvent utiliser une implémentation concrète.
    • Ils peuvent se baser sur une classe abstraite pour coder une nouvelle implémentation sans avoir à coder les méthodes les plus basiques.
    • Il peuvent implémenter directement l'interface et proposer une implémentation nettement plus spécifique en implémentant toutes les méthodes.



    a++

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 47
    Points : 24
    Points
    24
    Par défaut
    Uther > Ok mais si on ne récrit pas toutes les méthodes d'une classe abstraites alors la classe héritée devient aussi une classe abstraite ce qui n'as pas trop d'intéret....

    adiGuba > Merci c'est parfait, ton explication est on ne peut plus clair et me satisfait parfaitement !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Citation Envoyé par rastakouair Voir le message
    Uther > Ok mais si on ne récrit pas toutes les méthodes d'une classe abstraites alors la classe héritée devient aussi une classe abstraite ce qui n'as pas trop d'intéret....
    Je ne vois pas trop le rapport :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    abstract class Animal {
        private int age;
     
        public void setAge(int age) {
            this.age = age;
        }
     
        public int getAge() {
            return this.age;
        }
     
        public abstract int getNombreDePattes();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Chien extends Animal {
        public int getNombreDePattes() {
            return 4;
        }
    }
    Je n'ai pas réécrit toutes les méthodes de Animal, pourtant je peux t'assurer que mon Chien est bien réel !

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2007
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 47
    Points : 24
    Points
    24
    Par défaut
    Duc Lebowski > autant pour moi, j'ai mal lu son commentaire

Discussions similaires

  1. Instance d'une classe fille à partir d'une classe mère
    Par Mathieu Salles dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 17/10/2012, 16h09
  2. Réponses: 6
    Dernier message: 14/12/2008, 02h12
  3. Réponses: 4
    Dernier message: 06/04/2008, 18h34
  4. Héritage d'une classe MFC et d'une classe non MFC
    Par Etienne Paquette dans le forum MFC
    Réponses: 7
    Dernier message: 04/12/2007, 20h19
  5. Réponses: 14
    Dernier message: 15/12/2005, 18h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo