Kovarijanca i sedam OOPL-a

Tema rada je kovarijanca ne-generičkih parametara u sedam OOP jezika: C++, Eiffel, Java, C#, Scala, Kotlin, Swift (redoslijed je od najstarijeg do najmlađeg).

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 donekle riješeno tek 2014.
No, postoji još jedan jezik (među gore navedenim jezicima) koji to omogućava.
Napomena: upotreba generičkih parametara (i njihova kovarijanca) nije “pravo” rješenje (to je rješenje, ali s velikim praktičnim manama).