java返回并继承_Java方法从继承返回类型
我在Parent类中编写了一个方法,该方法返回一组对象A.但是,我有一个Child类(继承自Parent方法).我希望它返回一组某些对象B(B从A继承).
更具体地说,我的方法看起来像这样(它现在会引发编译错误).
父类方法:
public abstract Set getSet();
子类(扩展父类)方法:
public Set getSet() {...}
有可能这样做,还是没有意义?
解决方法:
首先,让我解释一下为什么您的代码无法编译.基本上,如果您有A类{},而B类扩展了A {},则Set< B>不是Set A的子类型.因此,如果您的父方法返回Set< A> ;,则您的覆盖必须返回相同的内容. A组< B>是完全不同的类型.
同样,Set< T扩展B>.不是Set< Textends A>的子类型.完整说明请参见Java docs.
我能想到的最接近的解决方案是使用通配符:
class A {}
class B extends A {}
abstract class Parent {
abstract Set extends A> getSet();
}
class Child extends Parent {
Set extends B> getSet() {
return new HashSet();
}
}
设置< ;?扩展B>是Set
根据您要精确实现的目标,这可能比您预期的要受限制,但可能会尽可能接近.
就像Jude所说的那样,使用内部类也许可以达到类似的效果,但是我不认为这将是一个更方便的解决方案.
标签:oop,inheritance,generics,java
来源: https://codeday.me/bug/20191112/2024382.html