CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[JAVA] Difference entre Interface et héritage ?

mechwarrior52
mechwarrior52
Niveau 9
17 juin 2020 à 01:05:51

Bonsoir tout le monde.

Je me suis lancé depuis peu dans l'apprentissage de Java. Je viens d'arriver aux interfaces mais je dois avouer être plus confus qu'autre chose.

En effet j'ai un peu l'impression que ces dernières permettent d'aboutir au même résultat que si j'avais utilisé l'héritage d'une classe.

Ma question est donc la suivante: Dans quelle situation devrais-je favoriser l'utilisation d'une interface au detriment d'un héritage ?

Merci d'avance pour vos futures réponses.

cybevil
cybevil
Niveau 27
17 juin 2020 à 07:36:28

En fait ça fait partie de l'héritage, une interface c'est juste une classe 100% abstraite.
Tu peux l'utiliser pour ranger tes constantes ainsi que tes méthodes en rapport avec un "thème".

Vu qu'une interface est 100% abstraite, toutes les classes implémentent l'interface doivent redéfinir toutes les méthodes présentes dans celles-ci.

Exemple :
Interface : AttaqueMagique
Classe : Personnage
Classe : Magicien extends Personnage implements AttaqueMagique

Message édité le 17 juin 2020 à 07:38:37 par cybevil
mov_eax_0
mov_eax_0
Niveau 10
17 juin 2020 à 08:10:06

Alors je vais tenter de t'éclairer sur ces notions qui peuvent être très subtiles pour les novices et qui sont souvent mal expliquées.
En Java tu ne peux pas faire d'héritage multiple, pour palier a cette limitation on utilise le design qui se nomme Composition par le biais des interfaces qui servent à décrire un comportement, une relation de type "can-do" (un poisson PEUT nager), à l'opposé de l'héritage de classe qui décrit une relation de type "is" (une Voiture EST un Véhicule).

L'héritage de classe est pertinent dans certains cas mais si il est mal utilisé, il en découle très vite des incohérences, c'est un système rigide et dépendant, à l'instar de la composition ou on peut créer des objets plus spécifiques et non dépendants d'autre classes.
Pour illustrer les limites de l'héritage on peut prendre le problème de l'ornithorynque qui se trouve à la croisière de plusieurs branches étant à la fois un mammifère et un ovipare (allaite et pond des oeufs)
dans ce cas il faudra rajouter une classe spécifique supplémentaire et a chaque fois qu'on rencontre un cas différent il faudra alourdir en ajoutant une classe.
petit schéma:
https://image.noelshack.com/fichiers/2020/25/3/1592373653-heritage.png

maintenant la même chose en utilisant les interfaces:

On voit que le système ne sera par surchargé de classes, les classes existantes implementeront le comportement necessaires pour l'objet en particulier:

https://image.noelshack.com/fichiers/2020/25/3/1592374201-compo.png

Message édité le 17 juin 2020 à 08:11:27 par mov_eax_0
boucif
boucif
Niveau 24
17 juin 2020 à 11:19:35

Comme dit le voisin du dessus c'était pour palier à l'absence d'héritage multiple qui conduisait à des situations merdiques comme l'héritage en diamant.
Au finale maintenant en Java tu peux mettre du code dans tes interfaces, chose qui n'était pas possible au départ.

mechwarrior52
mechwarrior52
Niveau 9
17 juin 2020 à 16:24:01

Donc si j'ai bien compris (Et je vais peut-être simplifier la chose), l'héritage est surtout utilisé lorsque l'ont desire passer des propriétés à d'autres classes. Et les interfaces sont utilisées lorsque l'ont desire transmettre des méthodes bien spécifique qui n'ont des fois pas de classe parente en commun.

Donc pour l'héritage, on pourrait visualiser cela par exemple le fait que si la mère d'un enfant a les yeux bleus et que le père est grand de taille, leur enfant sera grand avec des yeux bleus.

Mais pour l'interface, ça serait plutôt la capacité de faire du ski car tout le monde ne sait pas skier.

Est-ce que je suis sur la bonne piste ?

boucif
boucif
Niveau 24
17 juin 2020 à 16:34:53

Tu peux définir des propriétés et des méthodes dans les 2.

Par contre tu peux seulement hériter d'une classe mais tu peux implémenter plusieurs interface.

Souvent tu vas choisir une interface quand tu veux qu'un comportement soit adopter par des classes diverses, du genre https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html (ça pemet de comparer 2 objet du même type pour les ordonner dans un tri).

mechwarrior52
mechwarrior52
Niveau 9
18 juin 2020 à 08:21:36

Ah je crois que je comprends mieux maintenant. En somme l'interface offre une plus grande flexibilité que l'héritage si j'ai bien compris ?

Bunyan
Bunyan
Niveau 17
18 juin 2020 à 10:13:46

Les deux se complètent plutôt.

Une interface est utile pour indiquer que divers objets "sans lien" entre eux auront un comportement similaire (les méthodes implémentées par l'objet et qui sont déclarées dans l'interface).
L'héritage est utile pour indiquer une spécialisation de comportements.

Si nous avons uniquement l'héritage, il nous manquera des billes s'il n'est pas multiple.
Si nous avons uniquement les interfaces, le code sera fortement dupliqué.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment