И позвольте мне объяснить, почему я этого хочу,
скажем, у меня есть класс, который имеет метод
test () и он может быть переопределен
подклассы, в некоторых случаях я хочу
переопределить тест () и в некоторых случаях
test () самого суперкласса, там
Есть много способов сделать это, это будет
полезно, если кто-то может быть лучшим
решение.
Если ваш подкласс переопределяет test()
, , то он переопределяет test () - в этом весь смысл наследования объекта. Вы просто вызываете методы объекта, которые динамически разрешаются в соответствующую реализацию на основе класса времени выполнения объекта. В этом и заключается прелесть полиморфной типизации, фактически вызывающему не нужно вообще ничего об этом знать, а подклассы определяют, как их поведение отличается от суперкласса.
Если вы иногда хотите, чтобы он действовал как метод суперкласса, а иногда хотите, чтобы он действовал как метод подкласса, вам необходимо предоставить контекст, необходимый для этого. Вы можете определить два метода типа теста; тот, который никогда не переопределяется и всегда возвращает поведение суперкласса (вы даже можете пометить определение с помощью final
, чтобы убедиться, что он не переопределен), и ваш обычный, который переопределяется подклассами в зависимости от ситуации.
В качестве альтернативы, если имеется некоторая контекстная информация, вы можете позволить подклассам решить, как с этим справиться; их реализация может, например, проверять некоторые свойства, и на основании этого решить, следует ли вызвать super.test()
или продолжить собственную переопределенную реализацию.
Какой из них вы выберете, концептуально зависит от того, будет ли ваш main
метод (т.е. вызывающий объект) или сами объекты (под) класса находиться в наилучшем положении, чтобы определить, следует ли вызывать метод суперкласса или нет.
Но ни в коем случае нельзя переопределять метод и ожидать, что он магическим образом иногда не будет переопределен.