インターフェイスを作成した場合でも、インターフェイスを実装するためにライブラリのユーザーが拡張できる抽象基本クラスを作成することがよくあります。
抽象基本クラスは、メソッドのデフォルトの実装を提供することができます。これにより、ライブラリユーザは、これらのメソッドを独自に作成する必要がありません。また、具体的なサブクラスを作成する場合は、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();
}
}
これの良い例については、['java.util.AbstractCollection'](http://docs.oracle.com/javase/6/docs/api/java/util/AbstractCollection.html)とそのサブクラス。 – Taymon