Rozważmy następujące klasyZadzwoń Super metoda klasy automatycznie
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...
}
}
Mam kilka B1, B2, ... Bn zajęcia dla dzieci, które są już opracowane. Wszystkie z nich rozszerzają klasę A. Jeśli chcę dodać nową funkcjonalność we wszystkich z nich, najlepszym miejscem do tego jest zdefiniowanie, że w metodzie w klasie A. Ale warunkiem jest, że metoda powinna zawsze być wywoływana automatycznie tuż przed kończy się metoda init() klasy potomnej. Jednym z podstawowych sposobów, aby to zrobić, jest ponowne dodanie wywołania metody atEnd() na końcu metody init() klas potomnych. Ale czy istnieje inny sposób, aby to zrobić elegancko?
Jeśli chodzi o ochronę niezmienników klas, AOP byłoby bardzo złym rozwiązaniem. –
Chodzi o "rób rzeczy"; niezmienniki nie są wymienione. I nie jestem pewien, czy "bardzo słaba" jest odpowiednia, na podstawie dostarczonych informacji. – duffymo