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&gt ;,则您的覆盖必须返回相同的内容. 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();

}

}

设置&lt ;?扩展B>是Set

根据您要精确实现的目标,这可能比您预期的要受限制,但可能会尽可能接近.

就像Jude所说的那样,使用内部类也许可以达到类似的效果,但是我不认为这将是一个更方便的解决方案.

标签:oop,inheritance,generics,java

来源: https://codeday.me/bug/20191112/2024382.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值