【发布时间】:2016-04-05 06:27:18
【问题描述】:
我目前正在向java tutorial oracle学习Java类和对象,遇到过如下语句和代码。我理解这个概念,但我不知道为什么我们不能覆盖一个方法并将其定义为返回原始方法的超类?背后的原因是什么?有人可以启发我吗?提前感谢您的帮助!
你可以重写一个方法并定义它来返回一个子类 原来的方法,像这样:
public Number returnANumber() {
...
}
覆盖原来的方法:
public ImaginaryNumber returnANumber() {
...
}
【问题讨论】:
-
@KevinEsche,这不太准确。你可以重写一个方法来返回一个子类。
-
@shmosel 是的,你是对的,我的错
-
教程已经解释了为什么不这样做:但是,对象不一定是数字——它可以是字符串或其他类型。
-
客户端可能只通过超类型知道您的类,因此期望
Number(在这种情况下)。如果你给它一个超类型Number(在这种情况下是Object或Serializable),它就会中断。 -
每个
ImaginaryNumber都是Number但每个Number都不是ImaginaryNumber给定ImaginaryNumber extends/implements Number
标签: java return overriding subclass