Tutoriel JAVA N°14 : nouveautés interfaces JAVA 8 (’default’ , ’static’)

JPG - 15.4 ko

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

- Tutoriel ’interface Java’.

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

- Introduction
- 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
- Conclusion
- Votre avis nous interesse
- Cerfification

Durée

- 25 min

Introduction

QUESTION : quelles différences entre l’interface List de java 7 et l’interface List de java 8 ?

PNG - 38.4 ko
methode-par-defaut-java-8-1

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

Zip - 13.7 ko
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)

PNG - 9.2 ko
interface-java-8-tutoriel-0-projet

Codage Interface

PNG - 6 ko
interface-java-8-tutoriel-1

Codage classe implémentant Interface

PNG - 1.9 ko
interface-java-8-tutoriel-2

- 

PNG - 7 ko
interface-java-8-tutoriel-3

Codage méthode prenant paramètre Interface

PNG - 11.3 ko
interface-java-8-tutoriel-3bis

Démonstration

PNG - 26.7 ko
interface-java-8-tutoriel-0

- 

PNG - 10 ko
interface-java-8-tutoriel-17

- 

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

PNG - 7.7 ko
interface-java-8-tutoriel-4

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 :

PNG - 10.4 ko
interface-java-8-tutoriel-5

- 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 :

PNG - 8.7 ko
interface-java-8-tutoriel-6

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...

PNG - 1.9 ko
interface-java-8-tutoriel-7

...mais pas encore celui de l’interface !

- Mettez le cursus souris au dessus du mot surligné pour identifier des suggestions :

PNG - 13.1 ko
interface-java-8-tutoriel-8

- sélectionner ’Add body’

PNG - 9.1 ko
interface-java-8-tutoriel-9

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 !

PNG - 9.2 ko
interface-java-8-tutoriel-10

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 !

PNG - 6.4 ko
interface-java-8-tutoriel-11
PNG - 10.2 ko
interface-java-8-tutoriel-12

- Ajouter désormais une implémentation spécifique de identite() dans employe()

PNG - 10.2 ko
interface-java-8-tutoriel-13

- 

PNG - 12.5 ko
interface-java-8-tutoriel-14

- 

PNG - 5.2 ko
interface-java-8-tutoriel-15

- 

PNG - 3.3 ko
interface-java-8-tutoriel-16

- 

PNG - 10 ko
interface-java-8-tutoriel-17

- 

Correction

Zip - 14 ko
GestionFormations-Interface-v2

Partie 3 : implémenter 2 interfaces dans Java 8

- Supprimez l’implémentation de identite() dans Employe

PNG - 3.7 ko
interface-java-8-tutoriel-19

La classe employe n’a donc plus de methode identite()

PNG - 11 ko
interface-java-8-tutoriel-20

- Ajoutez une interface ISport

PNG - 9.9 ko
interface-java-8-tutoriel-18

- Expliquez pourquoi le code suivant génère une erreur de compilation

PNG - 4.1 ko
interface-java-8-tutoriel-21

- 

PNG - 8.8 ko
interface-java-8-tutoriel-22

Expliquez le lien avec le fait que java n’autorise pas l’héritage multiple.

- Comment gérer ce problème ?

Correction

Zip - 15.1 ko
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()

PNG - 10.9 ko
interface-java-8-tutoriel-23

- La classe Manager hérite de Employe et implémente IPersonnel

PNG - 21.2 ko
interface-java-8-tutoriel-24

- Quel est le résultat du code suivant :

PNG - 22.9 ko
interface-java-8-tutoriel-25

- Expliquez

Correction

Zip - 14.7 ko
GestionFormations-Interface-v4

Partie 5 : méthodes de la classe Object

Analysez le code suivant :

PNG - 10.6 ko
interface-java-8-tutoriel-26

- Quel problème ?

PNG - 13.7 ko
interface-java-8-tutoriel-27

- Expliquez

Correction

Zip - 14.9 ko
GestionFormations-Interface-v5

Partie 6 : Méthodes statiques dans une interface

ANalysez le code suivant :

PNG - 21.2 ko
interface-java-8-tutoriel-29

- Expliquez

Analysez le code et résultat suivant :

PNG - 21.2 ko
interface-java-8-tutoriel-29

- Expliquez

Demo

Zip - 14.5 ko
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 !

JPG - 15.4 ko

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 !