The interface extends an interface. A class cannot extend an interface. The reason is for type hinting so that only compatible Optimizers are used with any model that needs them.

Example: GradientDescentOptimizer implements FeatureBasedLinearOptimizer but it is an abstract class that can be used to implement batch gradient descent for any function. The MaxentGradientDescentOptimizer extends GradientDescentOptimizer and implements the optimization for the Maxent model. Thus it also implements the MaxentOptimizer interface so that it can be used with that model.