Cli*_*sen 1 java methods class object this
我在这里有这个代码,我正在尝试使用:
public class RationalNumber() {
private int num;
private int den;
public RationalNumber(int n, int d) {
num = n;
den = d;
}
public void multiply(RationalNumber r) {
/* missing code */
}
public int getNum() {
return num;
}
public int getDen() {
return den;
}
}
Run Code Online (Sandbox Code Playgroud)
在public void multiply方法中,我需要使用方法乘以将RationalNumber的分子乘以r的分子,并将此RationalNumber的分母乘以r的分母.以下哪一项可用于替换/*缺少代码*/以使乘法().
我把它缩小到:
num = num * r.num;
den = den * r.den;
Run Code Online (Sandbox Code Playgroud)
要么
this.num = this.num * r.num;
this.den = this.den * r.den;
Run Code Online (Sandbox Code Playgroud)
要么
num = num * r.getNum();
den = den * r.getDen();
Run Code Online (Sandbox Code Playgroud)
有人能告诉我这些(或多个)中的哪一个会使方法按预期工作?
简而言之:这三个都应该有效,最后一个变体只有一个区别:你的类不是final,它允许子类改变getNum和getDen的行为.
另外,创建表示Number的类是可变的并不常见.也许是更好的改变的签名multiply是
public RationalNumber multiply(RationalNumber)
Run Code Online (Sandbox Code Playgroud)
返回RationalNumber带有乘法结果的new 而不是更改当前状态的内部状态.在那种情况下,实施将是
return new RationalNumber(num * r.num, den * r.num);
Run Code Online (Sandbox Code Playgroud)
(或您提供的任何其他变体)