Java 8 : Les nouveautés

Parcourir les méthodes par défaut

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Vous allez voir que les méthodes par défaut dans les interfaces sont des méthodes implémentées dans les interfaces Java 8.

Transcription

Dans cette vidéo, nous allons nous intéresser aux méthodes par défaut sur les interfaces, ou si vous préférez, aux implémentations par défaut de certaines méthodes d'interface. Si je prends un exemple classique : création d'une interface que je vais appeler "PERSONNE", qui présente une méthode qui est donc " int getAge". Cette méthode "int getAge" va s'imposer à toutes les classes qui vont prétendre implémenter l'interface"PERSONNE". Si je crée ici une classe que j'appellerai "PERSONNE PHYSIQUE", et que cette classe "PERSONNE PHYSIQUE" prétend implémenter "Implement PERSONNE", eh bien immédiatement le compilateur, en l'occurrence à travers mon environnement de travail NetBeans me signale que je dois implémenter toutes les les méthodes abstraites. Donc je vais venir ici par exemple pour la personne physique. Pour "getAge" faire un return de "Age" qui sera par ailleurs un champ privé de cette classe. Si je crée une autre classe qui implémente l'interface "PERSONNE", nous parlons donc de la personne morale maintenant, cette classe" PERSONNE MORALE" prétend implémenter "Implements PERSONNE", et donc immédiatement le compilateur va réagir de la même façon. Sauf que la personne de l'âge de la personne et pas de vieillissement en fait de l'entreprise , au sens de la personne en tout cas. Donc, je suis obligé d'implémenter "getAge". Je peux laisser le code tel qu'on typique d'un certain type de codage "not supported yet". Il n'y a donc pas d'implémentation à donner pour "getAge". Et assez couramment en fait, ce qu'on va trouver dans ce genre de situation c'est une espèce d'implémentation par défaut du "getAge" pour la personne morale. On imagine que si donc j'ai plusieurs classes qui implémentent "PERSONNE" pour fournir la même implémentation par défaut , Ou bien si l'interface "PERSONNE" propose plusieurs méthodes dont uniquement certaines doivent être implémentées pour chacune des classes, ce genre de répétition effectivement des implémentations par défaut qui peuvent être beaucoup plus complexes évidemment que cette simple ligne , eh bien, finissent par devenir lourdes. Donc, ce que l'on propose avec les implémentations par défaut dans les interfaces c'est tout simplement de ne pas mettre les implémentations par défaut, dans les classes qui finalement ne sont pas concernées par la méthode de la personne mais On introduira La méthode "getAge" avec le mot-clé "DEFAULT", et ici on fournira l'implémentation par défaut. Cette simple pré-implémentation en quelque sorte de la méthode de l'interface va faire que la personne morale ici n'est plus en faute de ne pas implémenter le "getAge" .Bien entendu, elle pourrait comme la personne physique ici, proposer sa propre version du "getAge". Le fait d'avoir des méthodes par défaut sur l'interface ne préjuge pas de l'override et de de la redéfinition qui sera faite dans les classes qui implémenteront l'interface. D'ailleurs elle ne préjuge pas non plus de l'implémentation par les classes implémentant l'interface des autres méthodes de l'interface . Je peux très bien par exemple avoir une méthode par défaut par exemple pour le" getAge" mais que "getNom" soit systématiquement présente sur chacune des classes. Par exemple ici on va implémenter le getNom, donc en public bien entendu. Sur la personne physique on fait un return du nom de la personne" public String". Get Nom return Nom, sachant que Nom sera un attribut de la personne, bien entendu que l'on pourrait d'ailleurs diviser en "nom de famille", "prénom". Pour la personne morale, on imagine que le getNom, d'ailleurs je vais le faire générer automatiquement par l'outil "implement all abstract methods". On peut imaginer donc que le getNom soit en fait un return d'un attribut qui serait ici la raison sociale. Par exemple, raison sociale qui peut devenir alt entrée, un champ privé de la personne morale. Donc en fait dans cette interface personne je me retrouve avec 2 méthodes : une méthode implémentée par défaut dans l'interface et une méthode qui fonctionne de façon traditionnelle par rapport aux classes qui implémentent l'interface . Bien entendu les gourous ou les fans de la modélisation pourront faire une remarque tout à fait pertinente sur le fait que j'ai des classes ici qui prétendent implémenter l'interface mais qui ne prétendent pas fournir finalement une implémentation valable pour chacune des méthodes. Alors c' est vrai que du point de vue de la modélisation c'est un peu curieux. Bon maintenant je rappellerai simplement dans un petit coin de main ici , l'utilisation de WindowListener dont vous savez que, particulièrement quand vous faites de l' IHM swing, réagir sur l'IHM. Alors je vais faire une petite classe en fait. que je vais appeler MaFrame, qui va hériter de JFrame. Alors c'est un exemple pris dans Java swing JFrame, c'est la fenêtre flottante à l'écran JavaX swing JFrame. Même si en Java 8 effectivement swing est normalement rendu obsolète en quelque sorte, et remplacé par Java FX. On peut toujours aller chercher des exemples dans swing. Si je fais ici this.addWindowListener de façon à écouter, en fait le fonctionnement de la fenêtre. Le WindowListener donc en particulier donc la fermeture de la fenêtre. Vous savez que ici je peux maintenant créer une classe qui implémente WindowListener, qui est donc une interface. Je peux créer aussi une classe anonyme, donc je vais venir faire un new WindowListener. Mais là, la surprise, ou la surprise pour ceux qui savent pas évidemment, c'est que new WindowListener propose, j'introduis la syntaxe de la classe anonyme WindowListener que je trouve dans Java AWT event, propose un nombre de méthodes tout à fait impressionnantes puisque effectivement c'est toute la vie de la fenêtre qui est représentée par ce WindowListener. Et le problème, c'est que si je m'intéresse uniquement à la fermeture de la fenêtre, seul windowClosing va être réellement implémenté (windowClosing ou windowClosed. Cela dépend à quel moment j'interviens). Là je suis devant un cas où justement, si WindowListener avait profité des pré-implémentations pour les méthodes, et bien je n'aurais pas été obligé de venir implémenter de façon vive bien sûr, toutes les méthodes de WindowListener. J'aurais pu simplement implémenter la méthode qui m'intéresse. Un exemple donc de cas de figure où on va se retrouver avec des classes qui n'implémentent pas toute les méthodes de l'interface et pour lesquelles on profitera grandement de ces implémentations par défaut sur les interfaces.

Java 8 : Les nouveautés

Découvrez les nouveautés introduites par la version 8 de Java. Voyez les expressions lambda, les références de méthodes, les méthodes par défaut dans les interfaces, etc.

1h44 (21 vidéos)
Aucun commentaire n´est disponible actuellement
Logiciel :
Spécial abonnés
Date de parution :17 août 2015

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !