重载 toString 方法

Overload a toString Method

我正在尝试为具有多个构造函数的 class 编写一个 toString 方法:

public Fraction(int n1, int d1, int n2, int d2)
{
    num1=n1;
    den1=d1;
    num2=n2;
    den2=d2;
}

public Fraction(int nAns, int dAns)
{
    nAnswer=nAns;
    dAnswer=dAns;
}

但是,当我尝试编写一个 toString 时,我总是遇到编译错误(可能是因为这两个方法都被称为 toString):

public String toString()
{
    return "Fraction[numerator1="+num1+", numerator2="+num2+", denominator1="+den1+", denominator2="+den2+"]";
}

public String toString()
{
    return "Fraction[nAnswer="+nAnswer+", dAnswer="+dAnswer+"]";
}

如果我将其中一个 toString 方法命名为 toString 并将另一个方法命名为 toString2,程序会编译但不会为我提供所需的 toString2 输出。

然后我尝试为这个方法编写一个 if 语句,但我不确定我将如何编写 if 部分(我怎么说 "If your fraction looks like the first constructor, return the first toString; if your fraction looks like the second constructor, return the second toString"?)。

我尝试了以下方法,但我知道 if 部分是错误的,因为我不断收到编译错误:

if Fraction==Fraction(int num1, int den1, int num1, int den2)
{
    public String toString()
    {
        return "Fraction[numerator1="+num1+", numerator2="+num2+", denominator1="+den1+", denominator2="+den2+"]";
    }
else if Fraction==Fraction(int nAnswer, int dAnswer)
{
    public String toString()
    {
        return "Fraction[nAnswer="+nAnswer+", dAnswer="+dAnswer+"]";
    }
}

但我知道可以重载 toString 方法,因为 Java 库中的许多 class 都在使用它(例如,矩形 class)。

有什么建议吗?提前致谢!

首先,toString 方法来自对象 class,不要尝试制作多个这些方法或类似的东西,将所有内容都放在一个方法中。至于你的问题,你可以为你的class创建一个变量String description,并在构造函数中初始化它,然后在toString中只return那个变量。如果您在创建对象后没有以任何其他方式更改对象,则可以这样做,但情况可能并非如此。您还可以创建两个布尔变量 createdByFirstConstructorcreatedBySecondConstructor 并将它们初始化为 false。然后在两个构造函数中将相应的变量更改为 true ,然后在 toString 中检查哪个变量设置为 true 并相应地打印。希望这可以帮助。可能有更简单的解决方案,但我现在还没有想到,也许以后再考虑。

private boolean createdByFirst = false;
private boolean createdBySecond = false;

public Fraction(yourCode){
  createdByFirst = true;
}

public Fraction(yourOtherCode){
  createdBySecond = true;
}

public String toString(){
  if(createdByFirst)
    return "yourStringForFirstConstructor";
  else if(createdBySecond)
    return "yourStringForSecondConstructor";
  else
    return "Something else";
}

当你的老师告诉你尝试看看如何为两种不同的分数建模时,他们并不是要尝试将两种实现都塞进同一个 class 中,使用两个构造函数和两个完全不相关的集合的成员变量。这与飞行烤面包机一样有意义。

你的老师要你证明你理解如何创建一个基础 Fraction class 它定义了一个没有任何实现的分数的接口,然后写两个 subclass es,(查找 extends 关键字,)一个以一种方式计算分数,另一个以不同的方式计算分数。每个subclass都会有自己的构造函数,自己的一组成员变量,当然还有自己的toString()方法,所以一切都会好起来的。