Re: Object orientation question
On 27.10.2014 21:51, Eric Sosman wrote:
> Clearly, the generated code is the same: AdditionInterface extends
> BaseInterface, therefore any class implementing AdditionInterface also
> necessarily implements BaseInterface. If the class fails to provide a
> method specified by BaseInterface, the code won't compile. So the
> question is purely about readability and style.
This is not fully correct: if you check with reflection you will see
that there is a difference in what Class.getInterfaces() returns.
public static void main(String[] args) {
for (final Class<?> cl : Arrays.asList(Single.class, Both.class)) {
System.out.println("Class name: " + cl.getName());
for (final Class<?> ifac : cl.getInterfaces()) {
System.out.println(" " + ifac.getName());
}
}
}
yields in my test case
Class name: iface.inherit.Single
iface.inherit.DerivedI
Class name: iface.inherit.Both
iface.inherit.BaseI
iface.inherit.DerivedI
Unless there's something rather unusual going on, I'd tend to favor
brevity: Just say `class AdditionImpl implements AdditionInterface' and
let it go at that. Anyone who's curious about exactly what classes are
extended and which interfaces are implemented can always consult the
Javadoc, where it's all spelled out in gory detail.
I'm all with you on the readability through brevity here. There is one
more thing: by making AdditionInterface inherit BaseInterface the author
clearly stated the intend that anything which implements
AdditionInterface *is a* (or comprises) BaseInterface. There is no need
to express that again. Since that inheritance is not likely to go away
(such an interface change potentially affects a lot code and should thus
not be done easily) there is no need to care for the case that the
"extends" clause goes away leaving @Override dangling in AdditionImpl.
Kind regards
robert