在java中覆盖具有不同返回类型的方法?

nzh*_*hmz 18 java overriding overloading

我读过一本书,它说我可以覆盖一个方法,如果它有相同的签名.根据书中方法的签名是Method_Name + Parameters传递.

根据本书,我可以覆盖具有不同返回类型的方法.实际上是否可以在Java中覆盖具有不同返回类型的方法?因为我在网上做了一些搜索,我发现有人说要覆盖一个方法,返回类型也应该是相同的.

根据书中它还说当我们尝试使用相同的方法名称和参数但不同的返回类型重载方法时,java将抛出编译错误,因为签名仅表示方法名称和参数.如果这是真的,我们应该能够覆盖具有不同返回类型的方法.

请帮我理解这个.提前致谢.

JB *_*zet 25

您可以返回不同的类型,只要它与重写方法的返回类型兼容即可.兼容意味着:它是被重写方法返回的类或接口的子类,子接口或实现.

这是合乎逻辑的.如果一个方法返回一个Animal,并且派生类返回一个Cow,那么你就不会破坏超类方法的契约,因为Cow是一个Animal.如果派生类返回香蕉,那就不再正确,因为香蕉不是动物.

  • 虽然香蕉味道很好吃! (5认同)

Dav*_*der 11

你的父母班向外界承诺.例如,方法:

public Price calculatePrice(Items[] items).

它告诉世界期待价格.

如果在子类中增强该功能,则仍需要保留父类的原始承诺.

您可以添加重载的计算方法:

public Price calculatePrice(Items[] items, Integer minimumCharge).

您甚至可以使用更具体的返回类型来改善父母的承诺:

public AccuratePrice calculatePrice(Items[] items, Integer minimumCharge).

但你必须至少返回你父母所承诺的类型.方法声明中的异常也是如此.