更改toString方法

时间:2011-11-04 15:53:05

标签: java tostring

我最近被要求将使用继承的类重写为使用组合的类。我在重写toString()方法时遇到了一个问题。方法toString()不会返回字符串值,我没有收到运行时错误或编译错误。我最终将返回值更改为void以及要输出的方法名称。所以而不是返回我使用system.out

的字符串值

我尝试使用toString

public String toString()
{
    return String.format(
    "%s: %s %s\n%s: %s\n%s: %.2f\n%s: %.2f\n%s: %.2f\n%s: %.2f",
    "based-salaried commission employee", cEmp.getFirstName(), cEmp.getLastName(),
    "social security number", cEmp.getSocialSecurityNumber(),
    "gross sales", cEmp.getGrossSales(),
    "commission rate", cEmp.getCommissionRate(),
    "base salary",baseSalary,
    "earnings", earnings());
}

与我达成的协议

public void outPut()
{
    System.out.printf(
    "%s: %s %s\n%s: %s\n%s: %.2f\n%s: %.2f\n%s: %.2f\n%s: %.2f",
    "based-salaried commission employee", cEmp.getFirstName(), cEmp.getLastName(),
    "social security number", cEmp.getSocialSecurityNumber(),
    "gross sales", cEmp.getGrossSales(),
    "commission rate", cEmp.getCommissionRate(),
    "base salary",baseSalary,
    "earnings", earnings());
}

我的问题是,当我使用toString()方法时,为什么不从javac接收编译或运行时错误,如果没有错误,为什么不返回字符串值。

希望这个问题不是太奇怪。

3 个答案:

答案 0 :(得分:1)

Object(所有java对象最终继承的类)定义了它自己的toString()方法。因此,如果您没有覆盖类中的toString()方法,那么它将使用Object()中定义的方法(或类和Object之间的任何中间类)。

这就是为什么,如果你没有定义toString()方法,你就不会从javac中得到错误。

这通常会产生类似

的字符串
System.out.println("o=" + new Object().toString())
o=java.lang.Object@1176e5f

答案 1 :(得分:1)

Matthew回答了第一个问题(为什么没有编译错误)。关于第二个:

至于我的理解实例方法在Java中是虚拟的,在每种情况下都会调用实际对象的方法。因此,我想知道没有产生预期结果的代码:)

可能的错误:可能存在一些微不足道的布线错误。 IE浏览器。错误使用/测试用例:例如,使用/测试不同类的不同对象 - 与您实现的不同。或编译错误:您的代码尚未编译,测试时使用另一个(可能是旧的)版本。或类似的“琐碎”问题:)换句话说:

如果您的代码已编译/部署/运行,并且测试/使用的对象实例属于您的类,那么它应该运行您的逻辑。

答案 2 :(得分:-4)

您需要在函数上方添加@Override

@Override
public String toString()
{
    return String.format(
    "%s: %s %s\n%s: %s\n%s: %.2f\n%s: %.2f\n%s: %.2f\n%s: %.2f",
    "based-salaried commission employee", cEmp.getFirstName(), cEmp.getLastName(),
    "social security number", cEmp.getSocialSecurityNumber(),
    "gross sales", cEmp.getGrossSales(),
    "commission rate", cEmp.getCommissionRate(),
    "base salary",baseSalary,
    "earnings", earnings());
}