Прямо сейчас в каком-то 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()
.
Итак, конструктор 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()
В любом случае, если есть более разумный способ сделать это, я открыт для него.