( SzBlackY | 2016. 03. 20., v – 17:21 )

Mert ha különbözőképpen viselkednek a hívó szempontjából,

Hogy értelmezed itt a viselkedés kifejezést? A teljes f(x1,[x2,...]) -> v hozzárendelésre pontosan kell egyezniük vagy a contractben vállaltaknak megfelelően kell működniük?

Mert a fenti példánál maradva az EmailValidator.isValid(String) contractja szólhat úgy, hogy akkor és csak akkor fog igazat visszaadni, ha nem tudja bizonyítani, hogy az e-mail cím érvénytelen (mert ezt tényleg csak úgy tudná, hogy kiküldi a visszaigazoló levelet és megvárja, hogy rábökjenek a linkre...), ekkor viszont mindegyik implementáció helyes és teljes és szabadon cserélhetőek.

Ha viszont elvárod, hogy ha adott állapotban, adott argumentumokkal a leszármazott osztályok pontosan ugyanazt adják vissza, akkor pl. az összes hashCode() alapú collection-t bukod, mivel mindegyiknek az Object#hashCode-ot kellene visszaadnia.

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)