假设我具有以下界面:
public interface Numeric
{
public Numeric addition(Numeric x,Numeric y);
}
以及以下课程:
public class Complex implements Numeric
{
private int real;
private int img;
public Complex(int real, int img){
this.real = real;
this.img = img;
}
public Numeric addition(Numeric x, Numeric y){
if (x instanceof Complex && y instanceof Complex){
Complex n1 = (Complex)x;
Complex n2 = (Complex)y;
return new Complex(n1.getReal() + n1.getReal(), n2.getImg() +
n2.getImg());
} throw new UnsupportedOperationException();
}
public int getReal(){
return real;
}
public int getImg(){
return img;
}
}
我有几个问题:
加法的返回类型为Numeric,它是参数是数字。然后验证x和y是否为复杂类型。但是当定义中的参数是数字类型的吗?我回来的时候也一样。我返回一个复杂对象,不是数字。什么是相关性和逻辑在此之后。
如果x和y是Complex,因为我检查了if,为什么需要将x和y强制转换为新的2个对象?如果它们已经很复杂了,那么转换的目的是什么?
而如果不进行掷球,if为何不起作用? UnsupportedOperationException
是什么,为什么它是强制性的?
由于Complex
实现了Numeric
,因此可以在需要Complex
的任何地方使用任何Numeric
对象。
每个Numeric
对象都不是Complex
。可以有另一个类别Real
,其中Real implements Numeric
。在这种情况下,Numeric
变量可以引用Real
对象,并且不能用Real
替代Complex
对象。因此,您需要转换对象。
由于方法addition
的返回类型为Numeric
,因此您的代码必须返回类型为Numeric
的对象。如果您删除了throw语句,并且如果condition的计算结果为false,则方法将不返回任何内容,并且编译器将进行投诉。