Reputation: 33
If my Interface has a method:
doSomething($param);
And my class which implements this interface specifies the argument type like so:
doSomething(int $param) {}
Does this break the LSP?
Upvotes: 1
Views: 60
Reputation: 12852
Yes: it is sound for a function f2
to be a subtype of another function f1
if f2
's arguments are contravariant (and its return type covariant) w.r.t to those of f1
.
Consider your example: a client of the upper doSomething
(f1
) assumes that it may pass any value to the function, but if the actual implementation being called is the lower doSomething
(f2
), an error may be raised because this implementation only accepts integers.
You might also find this article about variances in Scala interesting.
Upvotes: 2