Абстрактный интерфейс не такой избыточный, как кажется, по-видимому, теоретически.
Интерфейс может быть расширен, как и класс. Если вы создаете иерархию интерфейса для своего приложения, у вас может быть «базовый» интерфейс, вы расширяете другие интерфейсы, но не хотите как сам объект.
Пример:
public abstract interface MyBaseInterface {
public String getName();
}
public interface MyBoat extends MyBaseInterface {
public String getMastSize();
}
public interface MyDog extends MyBaseInterface {
public long tinsOfFoodPerDay();
}
Вы не хотите, чтобы класс реализовал MyBaseInterface, только два других, MMyDog и MyBoat, но оба интерфейса совместно используют интерфейс MyBaseInterface, поэтому имеют свойство «name».
Я знаю его вид академический, но я думал, что некоторым может показаться интересным. : -)
В этом случае это действительно «маркер», чтобы сигнализировать разработчикам интерфейса, которые он не предназначен для самостоятельной реализации. Я должен указать на компилятор (по крайней мере, на солнце / ora 1.6, с которым я его пробовал) компилирует класс, реализующий абстрактный интерфейс.