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 :

Quand utilisez une classe abstraite ? (java 8+)


Sujet :

Langage Java

  1. #1
    Membre habitué Avatar de 4rocky4
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    528
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 528
    Points : 180
    Points
    180
    Par défaut Quand utilisez une classe abstraite ? (java 8+)
    Hello tout le monde,

    Sachant que depuis Java 8, les méthode "Default" sont arrivées dans les interfaces, j'ai du mal à comprendre l’intérêt de privilégier une classe abstraite par rapport à une interface dans la POO.

    Est-ce que que vous pourriez m'éclairer ?

    Merci !
    "J'glande pas ! Ça compile ..."

    4rocky4
    - Un con qui marche ira plus loin q'un intellectuel assis -

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Je dirais que ça ne vise absolument pas les mêmes choses, l'interface avec ses méthodes "default" est plus assimilable à une classe utilitaire avec des méthodes static, et encore, en moins pratique puisque l'interface ne peut pas avoir d'attribut (au niveau de l'enveloppe)...
    La classe abstraite est surtout faite pour factoriser des propriétés et méthodes communes à d'autres classes d'implémentation.

    Un exemple simple : une personne, avec ses variantes physique ou morale.
    Dans les 2 cas on a un nom, une adresse, une date de naissance..., par contre, seule la personne physique à un prénom, un nom patronymique etc... la personne morale à un capital social, un siret etc...
    Du coup, la classe abstraite est intéressante pour mettre en commun les propriétés et méthodes communes, sachant que comme il y a des différences dans les 2 cas, une instance de cette classe n'a pas de sens (d'où l'abstract).
    Ce genre de chose n'est pas envisageable avec une interface.

    Du reste, une interface, à la base, est là pour définir un "contrat" qu'une ou plusieurs classes respectent. En d'autre terme, on voit un objet par ses capacités plutôt que par sa classe d'implémentation.
    C'est super intéressant quand on veut définir des "actions" communes en terme de fonctionnalité mais développées complètement différemment en fonction de l'objet.
    Faire "avancer" ou "reculer" une voiture ne se fait pas de la même façon que pour un vélo, ou un avion etc...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  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,

    On peut en effet considérer que les méthodes par défaut aient remplacé un des usages des classes abstraites, mais ces dernières permettent toujours de gérer un état.

    En fait ça rajoute juste un niveau intermédiaire entre les interfaces pures (sans méthode par défaut) et les classes abstraites.

    • Interface pure : décrit un contrat à respecter.
    • Interface avec méthode par défaut : propose des implémentations basé sur le contrat en question, sans état (= pas d'attribut)
    • Classe abstraite : permet de définir les bases d'une implémentation plus spécifique, notamment en gérant un état via des attributs.
    • Classe concret : propose une implémentation complète.



    Enfin les méthodes par défaut ont un gros avantage supplémentaire : elles permettent de faire évoluer une interface sans tout casser !

Discussions similaires

  1. [Débutant]Passer une classe abstraite en paramètre
    Par Invité dans le forum Débuter
    Réponses: 2
    Dernier message: 06/01/2006, 17h56
  2. [Reflection]parser une classe de java.
    Par burkan21 dans le forum API standards et tierces
    Réponses: 9
    Dernier message: 02/12/2005, 21h05
  3. Réponses: 2
    Dernier message: 27/03/2005, 16h09
  4. [Debutant] Une classe abstraite en parametre ?
    Par kiroukou dans le forum Débuter
    Réponses: 8
    Dernier message: 03/02/2005, 15h05
  5. [PL/SQL]Appel d'une classe/méthode java
    Par marsup54 dans le forum SQL
    Réponses: 4
    Dernier message: 30/06/2004, 16h44

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