Re: Why Re-implement Interface
Tony wrote:
In Java API, we see such code:
public class ArrayList
extends AbstractList
implements List, RandomAccess, Cloneable, Serializable
My question is, why Sub-class still declare to re-implement the same
inteface, since Super-class already implements it?
It's useful as documentation.
In fact, in my ideal version of Java, it would be possible to declare that
the fact that ArrayList inherits from AbstractList is an implementation
detail invisible to its clients. That is, while it's good for client code
to contain
List<String> l = new ArrayList<String>();
it should never contain
AbstractList<String>l = new ArrayList<String>();
The maintainer should be completely free to re-implement ArrayList in some
other fashion, if he feels like it, with no fear of breaking client code.
Currently, that's not the case. (Strictly speaking, this would probably
also require making ArrayList final, since subclasses are often sensitive to
implementation issues. See http://en.wikipedia.org/wiki/Fragile_base_class
for a brief description of this problem.)