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