Если
"изменить код, чтобы использовать только класс A вместо класса Z"
включает конструкцию, тогда есть тривиальный ответ:
Создание и хранение объекта с меньшим количеством атрибутов / полей дешевле, чем создание объекта с большим количеством атрибутов, как с точки зрения памяти, так и с точки зрения времени, которое требуется для инициализации.
Кроме этого, я не ожидал бы существенного влияния на производительность.
Тем не менее, я не буду беспокоиться о производительности здесь - выберите тип, который обеспечивает лучшую абстракцию для того, что вы хотите сделать с этим. Если вашему коду не важно, какой именно подкласс вы используете, и вам не нужны какие-либо функции, предоставляемые подклассами, используйте более общий тип. Таким образом, ваш код остается более гибким. Если ваш код, однако, нуждается в такой функциональности в какой-то момент, то есть вы должны вводить приведение еще дальше, то вы зашли слишком далеко.