Интерфейсы великолепны с точки зрения гибкости. Но в случае, если интерфейс используется большим количеством клиентов. Добавление новых методов в интерфейс при сохранении старых недействительных mehtods приведет к потере кода всех клиентов, поскольку новые методы не будут присутствовать в клиентах. Как показано ниже:
public interface CustomInterface {
public void method1();
}
public class CustomImplementation implements CustomInterface {
@Override
public void method1() {
System.out.println("This is method1");
}
}
Если в какой-то момент позже мы добавим еще один метод для этого интерфейса, код всех клиентов сломается.
public interface CustomInterface {
public void method1();
public void method2();
}
Чтобы этого избежать, мы должны явно реализовать новые методы во всех кодах клиентов.
Итак, я считаю интерфейсы и этот сценарий следующим:
- Интерфейсы, написанные однажды, похожи на резьбу по камню. Они редко предполагаются и, как ожидается, будут меняться. И если они это сделают, они приходят с огромными затратами (переписывая весь код), для которых программисты должны быть готовы.
- В продолжение вышеизложенного можно ли написать интерфейсы, которые могут выдержать испытание временем?
- Как такой сценарий обрабатывается в интерфейсах, где вы ожидаете дополнительных функций в будущем? Это предполагает изменение в контракте, в котором привязаны все клиенты.
EDIT: Default
метод действительно является хорошим дополнением к интерфейсам Java, о которых многие люди упомянули в своих ответах. Но мой вопрос был больше в контексте разработки кода. И как реализация метода принудительного выполнения на клиенте является внутренним характером интерфейса. Но этот контракт между интерфейсом и клиентом кажется хрупким, поскольку функциональность в конечном итоге будет развиваться.