我应该何时在方法中使用它?

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)

有人能告诉我这些(或多个)中的哪一个会使方法按预期工作?

Lot*_*har 5

简而言之:这三个都应该有效,最后一个变体只有一个区别:你的类不是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)

(或您提供的任何其他变体)