Considere la siguiente clasellamada a un método de superclase automáticamente
class A{
public void init(){
//do this first;
}
public void atEnd(){
//do this after init of base class ends
}
}
class B1 extends A{
@Override
public void init()
{
super.init();
//do new stuff.
//I do not want to call atEnd() method here...
}
}
Tengo varios B1, B2, ... Bn clases hijas que ya se desarrollan. Todos ellos amplían la clase A. Si deseo agregar una nueva funcionalidad en todos ellos, el mejor lugar para hacerlo es definir eso en un método dentro de la clase A. Pero la condición es que el método siempre se llame automáticamente antes el método init() de la clase infantil termina. Una forma básica de hacerlo es volver a agregar la llamada al método atEnd() al final del método init() de las clases secundarias. ¿Pero hay alguna otra forma de hacerlo inteligentemente?
Si se trata de proteger invariantes de clase, AOP sería una solución muy pobre. –
Se trata de "hacer cosas"; invariantes no son mencionados. Y no estoy seguro de que sea "muy pobre", según la información suministrada. – duffymo