假设我有以下四个类,其中两个是抽象的,两个是具体的:Abstract1
、Concrete1
、Abstract2
、Concrete2
.
Concrete1
扩展 Abstract1
和 Concrete2
扩展 Abstract2
。
假设我有以下四个类,其中两个是抽象的,两个是具体的: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;
}
}
但这最后一段代码无效,因为 setProperty()
中参数的类(AbstractProp
和 ConcreteProp
)不同,使 @Override
注释无效。有没有办法可以完成我在这里尝试做的事情,也许使用泛型和/或通配符?
注意:我知道这种类型的命名是不好的做法,并且代码过于简单,我实际上并没有使用它,这只是一个例子,以使问题保持简单有可能。
最佳答案
如果您在 AbstractClass
上引入泛型,您就可以实现您的要求。
public abstract class AbstractClass<T extends AbstractProp> {
protected T someProperty;
public void setProperty(T someProperty) {
this.someProperty = someProperty;
}
}
然后指定您希望 ConcreteProp
成为 ConcreteClass
中所需的类型。
public class ConcreteClass extends AbstractClass<ConcreteProp> {
@Override
public void setProperty(final ConcreteProp someProperty) {
this.someProperty = someProperty;
}
}
关于java - 如果方法中参数的类扩展了抽象方法中使用的参数的类,则覆盖方法中参数的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53575402/