Да, открытые реализации приводят в рантайме к двойному диспетчеру как ты написал, рантаймовый полиморфизм в принципе не умеет восстанавливать более одного типа за раз и требует перечисление возможностей
вот взгляни под таким углом: пусть есть интерфейс IShape, и в нём не хватает метода square(), очень удобно будет написать этот модуль, вписав в IShape метод, которого тебе не хватает, и реализовать его для всех имеющихся потомков IShape, не правда ли?
вот взгляни под таким углом: пусть есть интерфейс IShape, и в нём не хватает метода square(), очень удобно будет написать этот модуль, вписав в IShape метод, которого тебе не хватает, и реализовать его для всех имеющихся потомков IShape, не правда ли?