Tutto bene quando hai il controllo totale su tutto il codice in questione e puoi implementarlo in anticipo. Ora immagina di avere una classe pubblica esistente usata in molti posti con un metodo
public class MyClass{
private String name;
MyClass(String name){
this.name = name;
}
public String getName(){
return name;
}
}
Ora devi passarlo al WizzBangProcessor standard che richiede classi per implementare WBPInterface ... che ha anche un metodo getName (), ma invece della tua implementazione concreta, questa interfaccia si aspetta che il metodo restituisca il nome di un tipo di Wizz Bang Processing.
In C # sarebbe 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;
}
}
In Java Tough dovrai identificare ogni punto della base di codice distribuita esistente in cui devi convertire da un'interfaccia all'altra. Sicuramente la società WizzBangProcessor avrebbe dovuto usare getWizzBangProcessName (), ma anche loro sono sviluppatori. Nel loro contesto getName andava bene. In realtà, al di fuori di Java, la maggior parte degli altri linguaggi basati su OO lo supportano. Java è raro che imponga l'implementazione di tutte le interfacce con lo stesso metodo NAME.
La maggior parte degli altri linguaggi ha un compilatore che è più che felice di ricevere un'istruzione per dire "questo metodo in questa classe che corrisponde alla firma di questo metodo in questa interfaccia implementata è la sua implementazione". Dopo tutto, il punto centrale della definizione delle interfacce è consentire l'astrazione della definizione dall'implementazione. (Non farmi nemmeno iniziare ad avere metodi predefiniti nelle interfacce in Java, per non parlare dell'override predefinito ... perché certo, ogni componente progettato per un'auto stradale dovrebbe essere in grado di essere sbattuto contro un'auto volante e funzionare - ehi sono entrambe auto ... Sono sicuro che la funzionalità predefinita di dire che il tuo navigatore satellitare non sarà influenzata dagli input predefiniti di beccheggio e rollio, perché le auto imbardano solo!