Как избавится от сравнения класов

Динамическое связывание
на самом деле это должно выглядеть как-то так.

Преимущество, в любое время можем поменять интерфейсы.
Порождение таблицы как правило выносят в фабрику
Взять вариант #6 не получится, если мы принимаем такое решение, то его надо допиливать. В чистом виде #7 мне не очень нравится, там остались по факту те же приведения типов данных, но они теперь ограничены исключениями. Поэтому я склоняюсь к поиску решения, которое устроит всех.

@kozinove, решение за тобой.