In molte lingue, super()
ti consente di chiamare il metodo genitore che hai sovrascritto. Ho utilizzato super
nel mio Javascript (con un'implementazione orientata agli oggetti) per eseguire codice comune per un lungo periodo senza problemi. Ora ho finalmente colpito un caso in cui chiamare un metodo di classe base protected
sarebbe stato meglio che chiamare super
.
Ecco un esempio concreto.
Grandparent -> Parent -> Kid
Avevo bisogno di aggiungere un Kid. È identico a Parent tranne per un metodo chiamato someMethod. Kid's someMethod aveva bisogno di fare le cose comuni di Nonno, ma non delle cose specifiche di Parent. So SomeMethod di Kid non poteva chiamare super
perché ciò avrebbe attivato il codice specifico di Parent. Invece di cambiare la mia grande struttura di classe, ho appena creato Kid duplicato il codice comune di Nonno.
Grandparent {
someMethod {
do common stuff
};
}
Parent: Grandparent {
someMethod {
super();
do parent specific stuff
}
}
Kid: Parent {
someMethod {
duplicate of common stuff
do kid specific stuff
}
}
Nel mio libro, il codice duplicato è sbagliato. Se solo il nonno scrivesse le sue cose comuni come metodo protetto, non avrei bisogno di duplicare il codice.
Grandparent {
protected commonMethod
virtual someMethod
}
Parent: Grandparent {
someMethod {
commonMethod
do parent specific stuff
}
}
Kid: Parent {
someMethod {
commonMethod
do kid specific stuff
}
}
Devo semplicemente smettere di usare super
e passare ai metodi protected
per l'esecuzione di codice comune? Ci sono dei problemi con i metodi protetti per l'esecuzione di materiale comune?