Все добре і добре, коли ви маєте повний контроль над усім кодом, про який йде мова, і можете це реалізувати заздалегідь. А тепер уявіть, що у вас є існуючий публічний клас, який використовується в багатьох місцях із методом
public class MyClass{
private String name;
MyClass(String name){
this.name = name;
}
public String getName(){
return name;
}
}
Тепер вам потрібно передати його у полицю WizzBangProcessor, яка вимагає класів для реалізації WBPInterface ..., який також має метод getName (), але замість вашої конкретної реалізації цей інтерфейс очікує, що метод поверне ім'я типу обробки Wizz Bang.
У C # це було б тривіально
public class MyClass : WBPInterface{
private String name;
String WBPInterface.getName(){
return "MyWizzBangProcessor";
}
MyClass(String name){
this.name = name;
}
public String getName(){
return name;
}
}
У Java Tough вам потрібно буде визначити кожну точку в існуючій базі розгорнутого коду, де вам потрібно перетворити з одного інтерфейсу на інший. Звичайно, компанія WizzBangProcessor повинна була використовувати getWizzBangProcessName (), але вони теж розробники. У їхньому контексті getName було добре. Насправді, поза Java, більшість інших мов на основі OO підтримують це. Java рідко заставляє всі інтерфейси реалізовуватися одним і тим же методом NAME.
У більшості інших мов є компілятор, який із задоволенням приймає вказівку сказати "цей метод у цьому класі, який відповідає підпису цього методу в цьому реалізованому інтерфейсі, це його реалізація". Врешті-решт, вся суть визначення інтерфейсів полягає у тому, щоб дозволити абстрагування визначення від реалізації. . вони обидва автомобілі ... Я впевнений, що функціональність за замовчуванням, наприклад, скаже, що ваш супутник навігації не вплине на введення кроку та нахилу за замовчуванням, тому що машини лише позіхають!