1

我正在处理一项任务,我必须创建一个由另一个类扩展的父类,我必须覆盖父类中的 toString() 方法并使用父 toString 方法来显示新的,但添加一行.

所有这些我都很好,但是在我卡住的地方,原来的 toString() 有一个数字格式对象,可以将双精度格式化为货币,我需要在新行中格式化双精度。说明说我不应该在新的 toString 方法中需要数字格式化程序,并让旧的 toString() 方法处理“大部分工作”,但我不知道如何格式化这个双精度。

这是一些代码,因此您可以了解我的意思:

    import java.text.NumberFormat;

    public abstract class First {

    public First(int x, double y)

    protected int num = x;
    protected double num2 = y;
    }

    public String toString()
    {   
        NumberFormat x = NumberFormat.getCurrencyInstance();

        return "Int num: " + num + 
             "\n     num2: " + x.format(num2);

    }
    }

然后我有子类:

public class Second extends First {

protected double num3;

public Second(int x, double y, double z) 
{
 super(x, y);
 num3 = z

}

public String toString()
{
    return super.toString() + "\n num3 " + num3; 
}

}

如果我这样做(我省略了很多不相关的代码)它可以工作,但我需要像钱一样格式化 num3,就像 num2 在父类中但我不能在子类中有格式化程序对象。

如果有人能把我推向正确的方向,我将不胜感激。

4

2 回答 2

2

您可以将 Formatting 与toString()父类中的方法分开,然后在您的孩子中使用它,例如:

在第一

protected String formatNum(double number)
{
    NumberFormat x = NumberFormat.getCurrencyInstance();
    return x.format(number); 
}

public String toString()
{   
    return "Int num: " + num + 
         "\n     num2: " + formatNum(num2);
}

然后在第二

public String toString()
{
    return super.toString() + "\n num3 " + formatNum(num3); 
}

编辑另一种方法是将NumberFormat对象作为对象的一部分,First然后在构造函数中初始化

public abstract class First {

    protected int num;
    protected double num2;    
    protected NumberFormat f;

    public First(int x, double y)
    {
        num = x;
        num2 = y;
        f = NumberFormat.getCurrencyInstance();
    }

    public String toString()
    {   
        return "Int num: " + num + 
             "\n     num2: " + f.format(num2);
    }
}

然后就用它Second

public String toString()
{
    return super.toString() + "\n num3 " + f.format(num3); 
}
于 2013-09-09T23:17:57.493 回答
0

如果没有检查, NumberFormat.getCurrencyInstance() 可能会返回一个单例,因此像父级一样调用它,不会导致另一个对象,而是与父级使用的对象相同......也许是一个有趣的问题:)。

于 2013-09-10T06:45:11.150 回答