ubstituir a classe do parâmetro no método se estender a do parâmetro usado no método abstra

uponha que eu tenha as quatro classes a seguir, das quais duas são abstratas e duas são concretaAbstract1, Concrete1, Abstract2, Concrete2.

Concrete1 estendeAbstract1 eConcrete1 estendeAbstract1.

uponha que eu tenha as quatro classes a seguir, das quais duas são abstratas e duas são concretaAbstractProp, ConcreteProp, AbstractClass, ConcreteClass.

ConcreteProp estendeAbstractProp eConcreteClass estendeAbstractClass.

O código paraAbstractClass teria a seguinte aparência:

public abstract class AbstractClass {
    protected AbstractProp someProperty;

    public abstract void setProperty(AbstractProp someProperty);
}

Quando implementandoConcreteClass, Quero poder fazer algo assim (lembre-se de queAbstractProp estende `ConcreteProp):

public class ConcreteClass extends AbstractClass {
    @Override
    public void setProperty(ConcreteProp someProperty) {
        this.someProperty = someProperty;
    }
}

Mas este último bit de código não é válido porque as classes dos parâmetros AbstractProp eConcreteProp) emsetProperty() diferem, tornando o@Override anotação inválida. Existe uma maneira de realizar o que estou tentando fazer aqui, talvez usando genéricos e / ou curingas?

NOTA Estou ciente de que esse tipo de nomeação é uma prática ruim e o código é simplista demais, na verdade não estou usando isso e este é apenas um exemplo para manter a pergunta o mais simples possíve

questionAnswers(1)

yourAnswerToTheQuestion