Even if you are creating an interface, it often also makes sense to create an abstract base class that your library users can extend to implement the interface.
An abstract base class can provide standard method implementations so that the library user does not need to create them. It can also define abstract methods that an API user must implement if they want to create a specific subclass.
public abstract class MyBaseClass implements MyInterface {
mikera
source share