Вы выбираете интерфейс на Java, чтобы избежать проблемы с алмазом при множественном наследовании .
Если вы хотите, чтобы все ваши методы были реализованы вашим клиентом, вы идете на интерфейс. Это означает, что вы разрабатываете приложение в абстрактном виде.
Вы выбираете абстрактный класс, если уже знаете, что общего. Например, возьмите абстрактный класс Car
. На более высоком уровне вы реализуете общие автомобильные методы, такие как calculateRPM()
. Это обычный метод, и вы позволяете клиенту реализовать свое поведение, например calculateMaxSpeed()
и т. Д. Вероятно, вы бы объяснили, указав несколько примеров в реальном времени, с которыми вы столкнулись в повседневной работе.