Comme Java 9 va nous permettre de définir private
et private static
méthodes aussi dans les interfaces, quelle serait la différence restante entre interface
et class
? De plus, Java évolue-t-il lentement vers l'héritage multiple?
Les méthodes d'interface privée dans 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 remplacées par des sous-classes. En tant que telles, elles n'interagissent pas vraiment en parlant d’héritage (et en particulier d’héritage multiple), il en existe (au moins?) trois sortes:
String
est un Object
. Java a permis l'héritage multiple de types dès le premier jour (via des interfaces).Comme vous pouvez le voir, les méthodes d'interface privée n'ajoutent rien ici.
Concernant votre question sur la façon dont les interfaces et les classes se comparent, il existe deux différences principales: l'héritage multiple et l'état. Les interfaces prennent en charge 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 y avait un moyen pour une interface de forcer une implémentation à avoir un champ non public particulier ou à en définir un lui-même, le jeu changerait et les interfaces pourraient rivaliser avec les classes.
Les méthodes privées ne sont pas héritées par les sous-classes, donc cette fonctionnalité n'affecte pas les classes d'implémentation. Je crois que les méthodes privées dans les interfaces nous permettent de partager du code entre les méthodes par défaut.
Les interfaces Java ne peuvent toujours pas avoir de membres non statiques. C'est une grande différence et non pas un IMO à héritage multiple.
Les interfaces Java 9 ne peuvent toujours pas contenir de champs et de constructeurs. Cela fait une énorme différence entre les classes et les interfaces, donc Java 9 est loin d'être l'héritage multiple.
L'interface Java dans la version 9 a des méthodes privées mais statiques privées. La fonctionnalité a été introduite pour permettre des méthodes modulaires. Une fonction devrait fonctionner avec une seule responsabilité au lieu d'utiliser de longues méthodes par défaut. Cela n'a rien à voir avec l'héritage multiple. Plus les méthodes statiques sont privées, plus vous pourrez écrire du code propre et réutilisable. Quoi qu'il en soit, les méthodes statiques, qu'elles soient publiques ou protégées, ne peuvent pas être remplacées.