Jedu li krave travu?

Tema je kovarijanca ne-generičkih parametara u jezicima PL/SQL, C++, Eiffel, Java, Scala, Kotlin (osim PL/SQL-a, redoslijed ostalih jezika je redoslijed njihovog pojavljivanja).

SAŽETAK

U primjeru se kovarijanca pokušava primijeniti kod dva povezana para nadklasa/podklasa.
U konkretnom slučaju to su klase Zivotinja/Krava i Zivotinjska_hrana/Kravlja_hrana.

U jednoj proceduri klase Zivotinja nalazi se parametar klase Zivotinjska_hrana.
Možemo li (u gore navedenim jezicima) u podklasi Krava napraviti nadjačanu proceduru koja koristi klasu Kravlja_hrana, umjesto klase Zivotinjska_hrana?
Jedan jezik imao je tu mogućnost od početka (kraj 80-ih), ali je ta mogućnost omogućavala runtime grešku, što je riješeno 2014.
No postoji još jedan jezik (među gore navedenim jezicima) koji to omogućava, na drugačiji način.

Napomena: upotreba generičkih parametara (i njihova kovarijanca) nije “pravo” rješenje (to je rješenje, ali s velikim praktičnim manama).