This requires the covariant rule, and works well in Eiffel. It fails because we have used inheritance to implement code re-use rather than subtyping, but have called a feature of the ancestor class on an object of the descendant class as if the descendant object were a true subtype. It is the compiler's job to detect and reject this error, to avoid the possibility of a run-time type error. Here's another example where a real-world situation suggests a covariant solution. Herbivores eat plants.
Cows are herbivores.
Grass is a plant. Cows eat grass but not other plants. This does what we want. Also consider the container 'diet'. Eiffel handles these well.