Tout va bien lorsque vous avez un contrôle total sur tout le code en question et que vous pouvez l'implémenter dès le départ. Imaginez maintenant que vous avez une classe publique existante utilisée dans de nombreux endroits avec une méthode
public class MyClass{
private String name;
MyClass(String name){
this.name = name;
}
public String getName(){
return name;
}
}
Maintenant, vous devez le passer dans le WizzBangProcessor standard qui nécessite des classes pour implémenter le WBPInterface ... qui a également une méthode getName (), mais au lieu de votre implémentation concrète, cette interface s'attend à ce que la méthode renvoie le nom d'un type de Wizz Bang Processing.
En C # ce serait un trvial
public class MyClass : WBPInterface{
private String name;
String WBPInterface.getName(){
return "MyWizzBangProcessor";
}
MyClass(String name){
this.name = name;
}
public String getName(){
return name;
}
}
Dans Java Tough, vous allez devoir identifier chaque point dans la base de code déployée existante où vous devez convertir d'une interface à l'autre. Bien sûr, la société WizzBangProcessor aurait dû utiliser getWizzBangProcessName (), mais ce sont aussi des développeurs. Dans leur contexte, getName était bien. En fait, en dehors de Java, la plupart des autres langages basés sur OO le prennent en charge. Java est rare en forçant toutes les interfaces à être implémentées avec la même méthode NAME.
La plupart des autres langages ont un compilateur qui est plus qu'heureux de prendre une instruction pour dire "cette méthode dans cette classe qui correspond à la signature de cette méthode dans cette interface implémentée est son implémentation". Après tout, le but de la définition des interfaces est de permettre à la définition d'être abstraite de l'implémentation. (Ne me lancez même pas sur les méthodes par défaut dans les interfaces en Java, et encore moins sur le remplacement par défaut ... parce que bien sûr, chaque composant conçu pour une voiture de route devrait pouvoir être claqué dans une voiture volante et juste fonctionner - hé ce sont deux voitures ... Je suis sûr que la fonctionnalité par défaut de dire que votre GPS ne sera pas affectée par les entrées par défaut de tangage et de roulis, car les voitures ne font que lacer!