Developpez.com - Rubrique Java

Le Club des Développeurs et IT Pro

Du neuf sur les interfaces avec Java 8

Un tutoriel d'Olivier Croisier

Le 2014-02-11 21:26:21, par Mickael Baron, Rédacteur
Olivier Croisier nous propose un tutoriel sur les nouveautés proposées par Java 8. Cet article s'intéresse plus particulièrement sur les nouvelles fonctionnalités introduites dans les interfaces Java.

Le lien pour le tutoriel : http://oliviercroisier.developpez.co...es-interfaces/

Profitez de cette discussion pour laisser des commentaires.
  Discussion forum
15 commentaires
  • professeur shadoko
    Membre chevronné
    je me permet de signaler un erreur dans ce texte: l'emploi du mot "surcharge" au lieu de "specialisation" ou "redéfinition"
    "surcharge" est le mot pour traduire "overloading" pas "overriding" et donc
  • adiGuba
    Expert éminent sénior
    Envoyé par Traroth2
    Pour le coup, je me demande pourquoi ne pas avoir fait la même chose au niveau des classes, en fait. Je cherche une règle qui s'appliquererait plus difficilement à une classe qu'à une interface dans ce que tu expliques, mais je n'en vois pas...
    Il n'y a pas besoin de cela au niveau des classes tu peux très bien rajouter une méthode dans une classe sans forcément "tout casser".

    a++
  • thelvin
    Modérateur
    Pour la factorisation, je ne vois toujours pas ce qui t'empêche de le faire avec des classes, maintenant comme depuis toujours.

    Pour l'héritage multiple, le problème est toujours la question de l'héritage en diamant, et du fait que les classes définissent leur état interne. Une interface ne définit pas son état, et les méthodes par défaut ne peuvent qu'utiliser le contrat défini par les méthodes de l'interface, sans qu'il puisse y avoir question de l'effet sur les variables membres et lesquelles interviennent, puisque ça n'existe pas.
  • egann538
    Membre actif
    Merci pour cet article. J'attendais depuis un moment ces méthodes par défaut dans les interfaces!
  • Traroth2
    Membre émérite
    Pour le coup, je me demande pourquoi ne pas avoir fait la même chose au niveau des classes, en fait. Je cherche une règle qui s'appliquererait plus difficilement à une classe qu'à une interface dans ce que tu expliques, mais je n'en vois pas...

    Merci pour cet article, en tout cas.
  • Traroth2
    Membre émérite
    Envoyé par adiGuba
    Il n'y a pas besoin de cela au niveau des classes tu peux très bien rajouter une méthode dans une classe sans forcément "tout casser".

    a++
    Oui, mais là, on parle de factorisation. Et d'héritage multiple, en fait.
  • la.lune
    Membre chevronné
    Envoyé par Traroth2
    Oui, mais là, on parle de factorisation. Et d'héritage multiple, en fait.
    Le fait qu'on manipule des méthodes de classe mère dans plusieurs classes filles différentes sans les redéfinir n'est ce pas de la factorisation ? Et quel est dans la réalité l'intérêt d'héritage multiple côté variables membres de l'objet? Ce sont les fonctionnalités qui sont sensé faire l'objet d'héritage multiple d'où le concept d'interface et je crois qu'avec les méthodes par défaut, on va pouvoir enfin faire cet héritage multiple de fonctionnalité sans avoir à implémenter ou réimplémenter les méthodes.
  • Traroth2
    Membre émérite
    Envoyé par thelvin

    Pour l'héritage multiple, le problème est toujours la question de l'héritage en diamant, et du fait que les classes définissent leur état interne. Une interface ne définit pas son état, et les méthodes par défaut ne peuvent qu'utiliser le contrat défini par les méthodes de l'interface, sans qu'il puisse y avoir question de l'effet sur les variables membres et lesquelles interviennent, puisque ça n'existe pas.
    Pour les méthodes, rien n'empêcherait de résoudre le sujet exactement comme c'est fait avec les interfaces avec ce nouveau mécanisme de méthode par défaut. Mais effectivement, pour les attributs, ça pourrait devenir scabreux. Ca serait sûrement quand même faisable, mais en y réfléchissant, les méthodes par défaut dans les interfaces permettent de s'en passer, en fait.
  • thelvin
    Modérateur
    Faisable, oui. Un appel de rassemblement des bugs, oui aussi. Et c'est en général contre la volonté de Java.
  • adiGuba
    Expert éminent sénior
    Envoyé par thelvin
    Faisable, oui. Un appel de rassemblement des bugs, oui aussi. Et c'est en général contre la volonté de Java.
    +1

    L'héritage multiple apporte plus de problème qu'il n'en résout.
    De plus cela va à l'encontre de la philosophie de Java où les méthodes d'instances sont "virtuelles" par défaut (c'est à dire qu'elle peuvent être redéfinies dans une sous-classes).

    L'héritage multiple apporterait tellement de problème de ce coté là qu'on finirait par déclarer toutes nos méthodes final pour éviter les soucis... mais en "pourrissant" l'API.

    Surtout que les méthodes par défaut permettront de prendre la majorité des avantages de l'héritage multiple... sans les principaux problèmes !

    Sinon petite remarque : comme pour une classe, l'ajout d'une méthode par défaut dans une interface n'est pas forcément sans risque, et cela peut des incompatibilités dans certains cas de conflits de noms (incompatibilités des sources la plupart du temps).

    a++