Все хорошо, если у вас есть полный контроль над всем рассматриваемым кодом и вы можете реализовать это заранее. Теперь представьте, что у вас есть существующий общедоступный класс, который используется во многих местах с методом
public class MyClass{
private String name;
MyClass(String name){
this.name = name;
}
public String getName(){
return name;
}
}
Теперь вам нужно передать его в готовый WizzBangProcessor, которому требуются классы для реализации WBPInterface ... который также имеет метод getName (), но вместо вашей конкретной реализации этот интерфейс ожидает, что метод вернет имя типа компании Wizz Bang Processing.
В 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, большинство других языков, основанных на объектно-ориентированных технологиях, поддерживают это. Java редко заставляет реализовывать все интерфейсы одним и тем же методом NAME.
В большинстве других языков есть компилятор, который более чем счастлив принять инструкцию, чтобы сказать: «этот метод в этом классе, который соответствует сигнатуре этого метода в этом реализованном интерфейсе, является его реализацией». В конце концов, весь смысл определения интерфейсов состоит в том, чтобы позволить абстрагировать определение от реализации. (Даже не заставляйте меня использовать методы по умолчанию в интерфейсах в Java, не говоря уже о переопределении по умолчанию .... потому что, конечно, каждый компонент, разработанный для дорожного автомобиля, должен иметь возможность врезаться в летающий автомобиль и просто работать - эй они обе машины ... Я уверен, что на функции по умолчанию, скажем, вашу спутниковую навигацию не повлияют входные данные по тангажу и крену, потому что машины только рыскают!