Это именно то, что я искал! Спасибо большое!

оложим, у меня есть следующие четыре класса, из которых два абстрактных и два конкретных:Abstract1, Concrete1, Abstract2, Concrete2.

Concrete1 продолжаетсяAbstract1 а такжеConcrete1 продолжаетсяAbstract1.

Предположим, у меня есть следующие четыре класса, из которых два абстрактных и два конкретных:AbstractProp, ConcreteProp, AbstractClass, ConcreteClass.

ConcreteProp продолжаетсяAbstractProp а такжеConcreteClass продолжаетсяAbstractClass.

Код дляAbstractClass будет выглядеть следующим образом:

public abstract class AbstractClass {
    protected AbstractProp someProperty;

    public abstract void setProperty(AbstractProp someProperty);
}

При реализацииConcreteClassЯ хочу быть в состоянии сделать что-то вроде этого (имейте в виду, чтоAbstractProp расширяет `ConcreteProp):

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

Но этот последний бит кода недопустим, потому что классы параметров (AbstractProp а такжеConcreteProp) вsetProperty() отличаются, что делает@Override аннотация недействительна. Есть ли способ, которым я могу сделать то, что я пытаюсь сделать здесь, возможно, с помощью обобщений и / или подстановочных знаков?

НОТА: Я знаю, что этот тип именования является плохой практикой, а код слишком упрощен, на самом деле я им не пользуюсь, и это всего лишь пример, позволяющий максимально упростить вопрос.

Ответы на вопрос(1)

Ваш ответ на вопрос