Considererei questo non solo una cattiva pratica, ma vanificando i principi di OOP perché una super chiamata è una forma di chiamata diversa: è una chiamata diretta che aggira il meccanismo di invio virtuale (è così che si evita la ricorsione infinita quando si è cercando di richiamare la gerarchia delle classi da un override).
Quando cambi i metodi, ad es. da someMethod
a someOtherMethod
, tipicamente in OOP, vuoi un nuovo invio virtuale completo per l'invocazione someOtherMethod
, vale a dire che vuoi il primo il gestore è la vera classe dell'oggetto, non una classe base.
Considera che la vera classe dell'oggetto (per this
) è in realtà una sottoclasse, XYZ, che le linee di codice attuali nel tuo esempio non conoscono (e non dovrebbero avere). Quella sottoclasse può aver scelto di sovrascrivere someOtherMethod
, e quando viene invocato (da un client esterno alla gerarchia di classi, e persino dall'implementazione di qualche altro metodo all'interno della gerarchia di classi), è qui che deve andare la chiamata.
Se non avessimo un invio virtuale completo per i metodi virtuali richiamati dalle implementazioni dei metodi della classe base, gran parte della potenza del metodo virtuale OOP e del meccanismo di override andrebbero persi.
In breve (a meno che tu non sappia veramente cosa stai facendo e stai provando a fare qualcosa di insolito), dovresti usare solo una super chiamata per richiamare la gerarchia di classi sullo stesso metodo e da una sovrascrittura di quella metodo. (Alcune lingue non ti permettono nemmeno di invocare super su un altro metodo o al di fuori di un override.)