Даже если вы создаете интерфейс, часто также имеет смысл создать абстрактный базовый класс, который пользователи вашей библиотеки могут расширить для реализации интерфейса.
Абстрактный базовый класс может предоставлять реализации по умолчанию дляметоды, так что пользователь вашей библиотеки не должен создавать их самостоятельно.Он также может определять абстрактные методы, которые пользователь API должен реализовать, если он хочет создать конкретный подкласс.
public abstract class MyBaseClass implements MyInterface {
// abstract method
// anyone who extends must implement this
public abstract void myMethod1();
// default error implementation
// overriding is optional, but if used it will throw an error
public void myMethod2() {
throw new UnsupportedOperationException();
}
// default implementation that subclasses may find useful:
public void doBothMethods() {
myMethod1();
myMethod2();
}
}