I have an interface A, for which I have to supply a few different implementations. However, those implementations share some helper methods, so I moved those methods to an abstract base class.
Interface A { void doX(); } abstract Class B implements A { protected void commonY() { // ... } @Override public abstract void doX(); } Class C extends B { @Override public void doX() { // ... } } Class D extends B { @Override public void doX() { // ... } }
My code works as expected, but I have a few questions:
-
Should I declare the abstract Method doX() in Class B? Why (not)?
-
Should I also explicitly declare ‘implements A’ on Class C and D? Why (not)?
I think it would be better to do it as follows:
You shouldn’t mix the interface (signature of methods) with the implementation.