Это именно то, что я искал! Спасибо большое!
оложим, у меня есть следующие четыре класса, из которых два абстрактных и два конкретных: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
аннотация недействительна. Есть ли способ, которым я могу сделать то, что я пытаюсь сделать здесь, возможно, с помощью обобщений и / или подстановочных знаков?
НОТА: Я знаю, что этот тип именования является плохой практикой, а код слишком упрощен, на самом деле я им не пользуюсь, и это всего лишь пример, позволяющий максимально упростить вопрос.