Java, вызов переопределенного метода неявно
Прямо сейчас в некотором коде Java у меня есть что-то вроде этого
class A {
void f() {
}
A() {
f();
}
}
class B extends A{
@Override
void f() {
//do some stuff
super.f();
}
}
class C extends B {
@Override
void f() {
//do some stuff
super.f();
}
}
я хочу иметьf()
вызывается и затем перебирает все родительские классы вверх, выполняя переопределенныеf()
, Я делаю это по телефонуsuper.f()
явно, хотя я бы не хотел этого делать.
Причина, по которой я это делаю, заключается в том, что постобработка выполняется после того, как конструктор в A достигнут. И в каждом классе есть состояние, которое должно быть надлежащим образом инициировано, поэтому у нас есть восходящий следf()
«S.
Так что конструкторA
действительно
A() {
//init some state in a
f(); //run f(), which will depend on the previous operation
}
Если я сделаю что-то вродеnew C();
я хочуC.f()
позвонил, потомB.f()
позвонил, потомA.f()
называется
В любом случае, если есть более разумный способ сделать это, я открыт для этого.