A few points to consider:
-
Interfaces didn’t have default methods until Java 8.
-
That
a
in your interface is implicitlyfinal
. Interfaces can’t define public mutable fields. -
Interfaces can’t define private (or protected, or package) fields.
-
Interfaces can’t have protected or package methods; they couldn’t have private methods until Java 9.
Abstract classes don’t have any of those issues. So when you need to do any of those things (other than #1, now that default methods exist), you reach for an abstract class (perhaps in addition to an interface that it implements).
2
solved What is the point of abstract classes, when you could just do an interface [duplicate]