Scala не отменяет равенство массива, потому что это невозможно. Можно переопределить методы только при создании подклассов. Поскольку массив не имеет подклассов (что невозможно), Scala не может переопределить его методы.
Если ваш производный класс не "использует" чистую виртуальную функцию базового класса, то либо производный класс не должен быть производным от базового, либо PVF не должен быть там. В любом случае, ваш дизайн ошибочен, и его необходимо переосмыслить.
И нет, нет способа удалить PVF.
Чистый виртуальный класс - это интерфейс, выполнение которого ожидается в вашем коде. Что бы произошло, если бы вы реализовали этот интерфейс и не реализовали ни один из методов? Как код, вызывающий ваш интерфейс, узнает, что вы не реализовали метод?
Возможны следующие варианты:
Цель производных от абстрактных классов состоит в том, чтобы внешний код мог использовать абстрактный класс и ожидать, что все функции были реализованы правильно. Возможность нереализовать метод нарушила бы эту цель, сделав код некомпилируемым. Однако вы можете создать исключение, если захотите.
Это вовсе не формальность. Если производный класс не демонстрирует все поведение родительского класса, он не должен быть производным от родительского. Это основной запах дизайна, и вам, вероятно, потребуется его рефакторинг.
Нет. Либо предоставьте реализацию по умолчанию в базовом классе, либо простую реализацию в производном классе, как вы предложили.
Когда вы наследуете класс, который имеет чистые виртуальные функции, вы ДОЛЖНЫ реализовать эти функции. Если вы этого не сделаете, ваш производный класс также будет абстрактным, и вы не сможете создать объект производного класса.
Разрешение этого не имело бы никакого смысла. Что произойдет, если вы вызовете функцию без реализации? Ошибка выполнения (это было бы глупо)? Вы можете возразить, что в некоторых случаях это может привести к ошибке времени компиляции, но это невозможно, если точный тип неизвестен (например, вы передаете указатель на экземпляр производного класса функции).
Хорошие ответы уже были, но если вам нужна дополнительная информация с теоретической стороны объектно-ориентированного проектирования, ознакомьтесь с принципом замены Лискова .
Как многие люди уже заявили, похоже, что либо базовый метод не должен быть чисто виртуальным, либо вам следует переосмыслить, действительно ли ваш производный класс является базовым ISA.
Однако это возможно чтобы обеспечить реализацию чистого виртуального метода в базовом классе. Это может действовать как реализация по умолчанию для производных классов, но вам по-прежнему требуется, чтобы производный класс выбирал явную реализацию базового класса.
Я не знаю, поможет ли это вам в решении вашей проблемы или нет.