Я хочу знать, определил ли базовый класс некоторые виртуальные методы, тогда обязательно ли переопределять их в производном классе?
Определенно нет.Производный класс должен решить, следует ли переопределить виртуальный метод.Обратите внимание, что некоторые классы рекомендуют , чтобы производные классы переопределяли определенный виртуальный метод в некоторых случаях, но компилятор не будет применять это.
Если метод базового класса является абстрактным, мыНужно реализовать метод в производном классе, но является ли обязательным модификатор переопределения?
Да, вам нужно использовать ключевое слово override
, в противном случае метод будет скрыт определением в производном классе..
Если вы действительно запустите свой код, вы увидите, что «Фигуры» напечатаны дважды.Это потому, что метод Color()
в классе Squares
не объявлен с использованием ключевого слова override
.Таким образом, скрывает метод базового класса.Это означает, что он будет доступен только через переменную типа Squares
:
Sqares s3 = new Squares();
s3.Color();
Это выведет «Квадрат», так как вы вызываете метод для переменной правильного типа.