Quando vuoi che un metodo sopraffatto prenda come argomento una sottoclasse dell'argomento del metodo sottoposto a override, puoi farlo normalmente con i generici (come discusso in Modello di modello con tipi di input diversi nel metodo sottoposto a override ). Un esempio di ciò può essere visto nel mio methodA della classe Parent e Child
Mi chiedo se sia possibile fare la stessa cosa con un metodo che prende come argomento un oggetto della classe stessa (my methodB )
abstract class Super {}
class Sub extends Super {}
abstract class Parent<S extends Super> {
abstract void methodA(S argument);
abstract void methodB(Parent<S> parent);
}
public class Child extends Parent<Sub> {
@Override
void methodA(Sub argument) {}
@Override
void methodB(Child child) {}
}
Nel codice sopra methodB in Child non sovrascrive methodB da Parent .
Ovviamente potrei usare casting in methodB da Child come in:
public class Child extends Parent<Sub> {
@Override
void methodB(Parent<Sub> child) {
(Child) child
}
}
Ma come regola generale cerco di evitare il casting il più possibile.
È possibile avere un methodB sovrascritto in Child (con firma @Override void methodB(Child child) )? In tal caso, quale sarebbe la firma di methodB (in Parent )?