Interfaces are slower to perform virtual dispatch than classes, because their virtual function tables are more complicated to layout.  Yes some of the JVMs have gotten better about it, but they still have to pay some penalties that don't exist with an abstract base class.

My other rationale is I want to add some default behavior to this class later.  Like in the patience diff patch I add reduceCommonStartEnd().  It has a default implementation based upon equals() but will later be replaced for the RawTextComparator with something that is more tightly tied to the representation.

Making the comparator an abstract class means we can later shift other logic into this class to support diff algorithms, and once we do that comparator implementors have a choice of using our naive equals() based approaches, or doing something even faster with their own sequence models, if they can support it.