Представьте себе, что SecondAbstract
находится в середине иерархии трех классов, и он хочет реализовать некоторые абстрактные методы из своей базы FirstAbstract
, оставляя при этом некоторый другой метод X для реализации из его дочернего элемента ThirdAbstract
.
В этом случае SecondAbstract
принудительно украшает метод X с помощью abstract
, поскольку он не хочет предоставлять реализацию; в то же время, он вынужден украшать его override
, поскольку он не определяет новый метод X, но хочет перенести ответственность за реализацию X на его дочерний элемент. Следовательно, abstract override
.
Как правило, понятия, моделируемые abstract
и override
, являются ортогональными. Первая заставляет производные классы реализовывать метод, а вторая распознает, что метод такой же, как указано в базовом классе, а не new
.
Таким образом:
- ни одно из ключевых слов: "простой" метод
abstract
только: производный класс должен реализовывать
override
только: реализация метода, определенного в базовом классе
abstract override
: производный класс должен реализовывать метод, определенный в базовом классе