Уроки С++. Изучение С++ {#11}. Что такое override и final?
override - это спецификатор, который показывает, что метод производного класса переопределяет виртуальный метод базового класса. Если метод помечается как override, компилятор проверяет, что в базовом и производном классе совпадают: - имя функции - тип возвращаемого значения (включая правила ковариантности для возвращаемого типа) - список параметров - cv-квалификаторы - ссылочные-квалификаторы При использовании override спецификатор доступа (public, protected, private) не проверяется. override допустимо использовать в двух случаях: 1. При объявлении метода класса. 2. При определении метода класса сразу же при объявлении класса. Примечания Использование override не является обязательным. Использовать спецификатор virtual при наличии спецификатора override допустимо, но считается излишним. Если деструктор базового класса является виртуальным, то деструктор производного класса также рекомендуется помечать как override. Попытка использовать override при определении метода отдельно от объявления класса приведет к ошибке "virt-specifiers not allowed outside a class definition". class A { public: virtual ~A() = default; virtual A* covariant_test() { return nullptr; } protected: virtual void cv_test() const {} virtual void ref_test() const & {} private: virtual void private_to_public_test() noexcept {} }; class B : public A { public: ~B() override {} B* covariant_test() override { return nullptr; } void private_to_public_test() noexcept override {} protected: //void foo() override; // Ошибка: пропущен квалификтор const void cv_test() const override {} //void ref_test() const override; // Ошибка: пропущен ссылочный квалификатор void ref_test() const & override {} }; int main() { B b; }
Java 33. Что такое переопределение (override) метода?
Переопределение метода (method overriding) в Java - это возможность заменить реализацию метода из базового класса (или интерфейса), который уже определен в производном классе, с тем же именем, списком аргументов и типом возвращаемого значения. Переопределение метода позволяет производному классу изменять поведение унаследованного метода без необходимости изменять его имя или сигнатуру. Для успешного переопределения метода нужно учитывать следующие правила: Имя метода, список аргументов и тип возвращаемого значения должны быть точно такими же, как у метода в базовом классе (или интерфейсе)...