Les méthodes d'interface privées de Java 9 se comportent exactement comme les autres méthodes privées : Elles doivent avoir un corps (même dans les classes abstraites) et ne peuvent être ni appelées ni surchargées par les sous-classes. En tant que telles, elles n'ont pas vraiment d'interaction avec l'héritage. En parlant d'héritage (et en particulier d'héritage multiple), il en existe (au moins ?) trois types :
-
Héritage des types signifie qu'un type peut être un autre type, par exemple
String
est un Object
. Java a permis l'héritage multiple des types dès le premier jour (via les interfaces).
-
Héritage du comportement signifie qu'un type peut hériter du comportement d'un autre type. Avant Java 8, seules les classes pouvaient implémenter des méthodes, il n'y avait donc qu'un seul héritage de ce type. Avec Java 8 sont apparues les méthodes par défaut, qui ont permis aux interfaces de mettre en œuvre des méthodes, donnant ainsi à Java un héritage multiple du comportement.
-
Héritage de l'état signifie qu'un type hérite de l'état interne d'un autre type (c'est-à-dire des champs). Dans l'état actuel des choses (Java 9 et tout ce qui est actuellement proposé pour les futures versions de Java), seules les classes peuvent avoir un état, il n'y a donc qu'un seul héritage de ce type.
Comme vous pouvez le constater, les méthodes de l'interface privée n'ajoutent rien ici.
En ce qui concerne votre question sur la comparaison entre les interfaces et les classes, il existe deux différences principales : l'héritage multiple et l'état. Les interfaces supportent la première, les classes peuvent avoir la seconde. Puisque l'état est assez important dans la POO typique, les classes resteront pertinentes.
S'il existait un moyen pour une interface de forcer une implémentation à avoir un champ non public particulier ou à en définir un elle-même, le jeu changerait et les interfaces pourraient concurrencer les classes.
31 votes
Je suis surpris que cela ait autant de votes positifs... Différences restantes :
protected
soutien,package-private
soutien, En gros, tout sauf l'ajout deprivate
ystatic
.. Les interfaces ne peuvent pas étendre les classes, les mots-clés réservésinterface
yclass
, la philosophie/le but/la raison d'être des deux. Je pourrais probablement continuer3 votes
La réponse est toujours la même que dans Interface avec méthodes par défaut vs classe abstraite en Java 8 sauf qu'il peut y avoir
private
dans une interface, qui ne peut évidemment pas avoir d'impact sur les autres classes.5 votes
@Aakash Étudiant : " Y a-t-il des questions stupides ? " Professeur : " Bien sûr que non ! "Et si l'élève posait à nouveau cette question juste après avoir obtenu la réponse ? Ne serait-ce pas une question stupide ? L'idée derrière cette phrase est " n'ayez pas peur de poser des questions, c'est ainsi que vous obtiendrez des réponses ", n'en abusez pas pour encourager la paresse.
1 votes
@VinceEmigh vous avez plus de votes positifs que la deuxième réponse la plus votée :) vous devriez transformer votre commentaire en un seul.
0 votes
Quelle serait la différence restante entre l'interface et la classe ? - en supposant que vous savez ce que font les classes java, ne pouvez-vous pas énumérer par vous-même les interfaces qui manqueront encore après ces ajouts ? Si on prend votre question au pied de la lettre, on dirait que vous demandez aux gens quelles sont les caractéristiques des classes java.
0 votes
Je pense que la question devrait plutôt être de savoir si les classes abstraites ont encore des avantages après que l'interface soit capable de tout faire. Bien sûr, nous ne pouvons pas créer d'objet d'interface, avoir un constructeur ou maintenir un état.
0 votes
Je pense que la caractéristique de l'interface et de la méthode privée est discutée de manière assez intéressante ici : journaldev.com/12850/java-9-private-methods-interfaces
0 votes
@VinceEmigh Mes excuses pour ce commentaire si tardif. Dans ce cas, le étudiant est stupide, no la question.