【发布时间】:2014-03-20 16:54:10
【问题描述】:
假设我正在编写一些类来执行简单的数学运算,并且我有一个抽象类JNumber,其中包含一个用于添加另一个数字的方法:
public abstract class JNumber
{
public abstract JNumber add(JNumber addend);
// etc.
}
add 的返回值表示this 与参数addend 之和。
现在假设我有一个JNumber 的抽象子类(称为JFieldElement),其中包括一个除法方法(我不能在JNumber 类中使用这个方法,因为你不能除整数,例如)。
public abstract class JFieldElement
extends JNumber
{
public abstract JFieldElement div(JFieldElement divisor);
}
现在假设我正在编写一个过程,它将采用扩展 JFieldElement 的某个类的实例 x,y,z 并计算如下表达式:
x / (y + z)
我可以试试:
JNumber w = y.add(z);
JNumber result = x.div(w);
但是,如果这样做,我会得到一个错误 - 因为add 的返回类型是JNumber,我们必须将w 声明为JNumber。但是我们不能对它应用函数div,因为该函数需要接收JFieldElement。
如果有某种方法可以指定add 函数应始终返回与调用它的任何类相同类型的值,这将起作用。有没有办法做到这一点?
【问题讨论】:
-
您说
JFieldElement是JNumber的子类。我没看到。 -
你写了“...因为你不能除整数”。其实你可以。 10 除以 3 是 3,1 是提醒。
标签: java inheritance