Avec Objis, spécialiste Java depuis 2005, maîtrisez l’évolution de la notion d’Interface Java dans sa version 8. Comprenez la notion de méthode par défaut, ainsi que le mot clé ‘default’. Comprenez cette technique , centrale dans l’ajout de nouvelles fonctionalités dans Java 8, comme les streams.
ASTUCE –> Soyez informé de la mise à jour ou création de tutos sur objis.com.
Auteur
Douglas MBIANDOU. Président Objis . Concepteur formation ‘Nouveautés Java 8 et 9’
Prérequis
Objectifs
Comprendre le nouveau mot clé ‘default’ java 8′ et le contexte de son arrivée
Comprendre la notion de méthode par défaut dans une interface
Comprendre la valeur ajoutée de la méthode par défaut
Comprendre les nom de méthode par défaut à éviter
Comprendre les méthodes statiques dans une interface Java 8
Programme
Partie 1 : interface avant Java 8
Partie 2 : mise en oeuvre Interface par défaut (java 8)
Partie 3 : implémenter 2 interfaces dans Java 8
Partie 4 : précédence de l’héritage
Partie 5 : méthodes de la classe Object
Partie 6 : méthodes statiques dans une interface
Durée
25 min
Introduction
QUESTION : quelles différences entre l’interface List de java 7 et l’interface List de java 8 ?
Les classes implémentant List et compilées avec Java 7 et antérieures parviendront-elles à compiler avec Java 8 ? A quoi sert le nouvel opérateur ‘default’ de Java 8 ?
Découvrez pas à pas, avec Objis la notion de méthode par défaut dans une interface Java 8. Identifier 6 notions clés.
Partie 1 : Interface avant Java 8
TELECHARGEZ le projet Eclipse initial
GestionFormations-Interface-v1
Ce projet, que nous allons modifier par la suite met en évidence 3 savoir-faire élémentaires liées à l’interface Java « traditionnelle » (jusqu’à java 7):
— 1) codage d’une interface (ici IPersonnel)
— 2) implémentation d’une interface par une classe (ici Employe)
— 3) codage d’une méthode prenant en paramètre une interface (ici méthode listerFormation() de la classe ServiceFormation)
Codage Interface
Codage classe implémentant Interface
Codage méthode prenant paramètre Interface
Démonstration
Partie 2 : Mise en oeuvre Interface par défaut (java 8)
BESOIN : on veux faire évoluer l’interface IPersonnel en ajoutant une méthode (identite()) mais sans obliger les classe implémentant IPersonnel (comme Employe) à redéfinir la nouvelle méthode.
Ajoutez une méthode identite() retournant une chaîne de caractère
Constatez immédiatement que Eclipse déclenche une ‘croix rouge’ sur la classe Employe , car celle-ci ne respecte plus le contrat qu’elle s’est pourtant engagée à respecter :
pour être désormais conforme au contrat, la classe Employe va devoir implémenter la nouvelle méthode identite(). Nous sommes donc condamné à retoucher le code de Employe…sauf si on ajoute le mot nouveau (java 8) mot clé default dans la déclaration de la méthode identite () de l’interface :
Notez que cela a pour effet immédiat de supprimer la ‘croix rouge’ présente dans la classe Employe ! Désormais le code de Employe compile…
…mais pas encore celui de l’interface !
Mettez le cursus souris au dessus du mot surligné pour identifier des suggestions :
sélectionner ‘Add body’
Hé oui ! vous ne révez pas ! vous avez bien vu : à partir de Java 8 il est possible de coder des méthodes dans les interfaces…un peux comme dans une classe abstraite !
2 avantages :
1) on n’a pas eu besoin d’implémenter obligatoirement la deuxième méthode dans la classe Employe
2) on peut appeler la méthode identite() à partir de Employe() . C’est l’implémentation par défaut qui sera appelée . et sans avoir à modifier les classes qui implémentent cette interface !
Ajouter désormais une implémentation spécifique de identite() dans employe()
Correction
GestionFormations-Interface-v2
Partie 3 : implémenter 2 interfaces dans Java 8
Supprimez l’implémentation de identite() dans Employe
La classe employe n’a donc plus de methode identite()
Ajoutez une interface ISport
Expliquez pourquoi le code suivant génère une erreur de compilation
Expliquez le lien avec le fait que java n’autorise pas l’héritage multiple.
Comment gérer ce problème ?
Correction
GestionFormations-Interface-v3
Partie 4 : Précédence de l’héritage
Ici nous faisons l’hypothèse que :
La classe Employe n’implémente aucune interface,
La classe Employe possède une class identite()
La classe Manager hérite de Employe et implémente IPersonnel
Quel est le résultat du code suivant :
Expliquez
Correction
GestionFormations-Interface-v4
Partie 5 : méthodes de la classe Object
Analysez le code suivant :
Quel problème ?
Expliquez
Correction
GestionFormations-Interface-v5
Partie 6 : Méthodes statiques dans une interface
ANalysez le code suivant :
Expliquez
Analysez le code et résultat suivant :
Expliquez
Demo
GestionFormations-Interface-v6
Conclusion
Vous avez touché du doigt le mécanisme de méthode par défaut de Java 8. Cette approche a permis d’ajouter par exemple dans l’interface List de nouveaux services (Streams) sans impacter du code codé avec versions java 7 et inférieure utilisant déjà l’interface List.
Votre avis nous intéresse
Vous avez remarqué une erreur ? Vous avez une recommandation pour améliorer ce tuto ? Vous souhaitez nous encourager à partager notre savoir-faire technique et pédagogique ?
Donner votre avis sur ce Tuto objis.com
Professionnels : maîtrisez les nouveautés Java 8 et 9 !
A travers notre nouvelle formation Nouveautés Java 8 et 9 (durée 4 jours) conçue par l’auteur de ce tutoriel, découvrez par la pratique le nouveau système de Modules Java 9 ainsi que des caractéristiques de Java 8 (Streams, Lambda, Optional…).
Un sérieux atout pour votre employabilité et l’évolution de votre carrière professionnelle !