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
)?