Есть смысл оценить (в сопоставлении с уже имеющимися средствами) некий вариант, как может быть гипотетически реализован полиморфизм в условном Pascal-подобном языке, ещё не испорченном мэйнстримом, с оглядкой на Оберон. И с учётом современных, на мой взгляд наконец-то здравых, тенденций в IT. К примеру, не знаю, как правильно охарактеризовать, пусть будет как переход от понятия наследования типов к некоему теоретико-множественному подходу над ними, что ли. Прослеживается этот эффект и в Go, где "расширение" структур осуществляется через "включение" (множественное):
https://github.com/luciotato/golang-notes/blob/master/OOP.md

И ученики Вирта (если не ошибаюсь) из Scala также, наигравшись всяким разным и в огромном количестве, постепенно переползают на понятие пересечение типов (в некотором смысле эквивалентно как в Go) и их объединение -- готовится новая система типизации -- DOT-исчисление типов (dependent object types) -- в частности, см. пересечение типов в виде "A & B" и объединение как "A | B" (пока ещё в привязке с понятием наследования, с мутным явным декларированием ковариантности и контравариантности, и пр.):
https://habr.com/company/lanit/blog/334018/

(в java-инфраструктуре (всё-таки масштабная промышленная платформа) такие техники "теоретико-множественности" типов (в том числе и для ликвидации необходимости использования типов вида Any) уже обкатывались где-то то ли в Ceylon или Gosu, или же в Groovy, та ещё свалка всего возможного).