Je suis débutant en JAVA et je suis en train d'apprendre la POO, mais je ne comprend pas l'utilité du mot clé abstract, et je n'ai pas trouvé de réponse claire sur google. Quelqu'un pourrait-il m'aider ?
une classe comme "abstraite" Cela veut dire que ta classe n'est pas complètement implémenté, c'est à dire qu'il y a des méthodes abstraites.
une méthode comme abstraire Cela veut dire que tu ne dis pas ce qu'elle fait mais ce qu'elle devra faire. Ainsi les classes filles devront implémenter cette méthode manquante.
Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
Mais dans ce cas , pourquoi ne pas créer une classe normale et rajouter les fonctions dans les classes fille ? De tout façon, elle seront tapées dans la classe fille...
L'intérêt d'une classe abstraite, c'est qu'il peut y avoir plusieurs classes filles. Si tu as une méthode dont le code est identique pour toutes les classes filles (ou une majorité d'entre elles), tu l'écris dans la classe abstraite. Elle sera transmise à toutes les classes filles grâce à l'héritage. Ca évite de faire du copier-coller. Et puuis si tu veux corriger, modifier ou optimiser ta méthode, tu le fais une fois dans ta classe abstraite et les changements sont immédiatement propagés à toutes les classes filles.
L'intérêt d'une classe abstraite, c'est qu'il peut y avoir plusieurs classes filles. Si tu as une méthode dont le code est identique pour toutes les classes filles (ou une majorité d'entre elles), tu l'écris dans la classe abstraite. Elle sera transmise à toutes les classes filles grâce à l'héritage. Ca évite de faire du copier-coller. Et puuis si tu veux corriger, modifier ou optimiser ta méthode, tu le fais une fois dans ta classe abstraite et les changements sont immédiatement propagés à toutes les classes filles.
C'est plutôt l'héritage "normal", pouvant être fait sans être abstrait.
Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
Oui, c'est vrai aussi. La différence entre une classe abstraite et "normale", c'est qu'on ne peut pas instancier une classe abstraite.En gros, c'est une classe "incomplète" qui contient deux sortes de méthodes.
- Des méthodes dont le code est identique pour les classes filles et qui sont implémentées dans la classe abstraite.
- Des méthodes qui sont définies, mais pas implémentées dans la classe abstraite, qu'il faudra obligatoirement implémenter dans les classes filles (sauf si elles sont elles-mêmes abstraites).
Si tu as une méthode dont le code est identique pour toutes les classes filles (ou une majorité d'entre elles), tu l'écris dans la classe abstraite. Elle sera transmise à toutes les classes filles grâce à l'héritage. Ca évite de faire du copier-coller. Et puuis si tu veux corriger, modifier ou optimiser ta méthode, tu le fais une fois dans ta classe abstraite et les changements sont immédiatement propagés à toutes les classes filles.
Euh le besoin auquel répond l'héritage, c'est la substituabilité. Si c'est juste pour factoriser du code, la composition convient sans problèmes. Elle convient même mieux car elle impose moins de travail pour respecter les contrats (notamment l'invariant de la classe).
Nada#3 a écrit:
Si j'ai bien compris une classe abstraite doit juste obliger une classe fille à réécrire la méthode abstraite , c'est ça ?
On peut voir les classes abstraites comme une spécialisation du concept de l'interface vers le concept de la classe :
comme dans une classe, l'implémentation établit et assure ses contrats (invariant de la classe), pour autant,
comme dans une interface, on demande aux classes dérivées et définir certaines fonctions pour pouvoir être instanciées.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C