Since the two correct answers didn't manage to convince you, I'll try to explain.
Interfaces define contracts - i.e. they define what implementors are going (and bound) to do, so that you know that whenever you refer to an object by an interface, it has a strictly defined behaviour, no matter how exactly it has been implemented.
Now, this contract comes in two parts:
- method signature - the method signature is the element that is enforced by the compiler - all implementors must conform to the all method signatures defined by the interface
- documented behaviour - when there is more to a method than its method signature, the special behaviour is documented. It again tells the client of the interface what to expect from all implementors, although it does not technigally force implementors to conform to it.
And here comes the concrete Collection
/ Set
example:
- if you are referring to an object as a
Collection
, then you don't know anything of the behaviour of add
- whether it allows duplicates or not
- if you are referring to an object as a
Set
, then you are certain that no duplicates are allowed.
This distinction is made by the javadoc of the redefined add
method.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…