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