重载构造函数的toString方法

时间:2013-12-21 00:51:29

标签: java

我正在尝试找出如何根据重载的构造函数创建单独的toString方法。以下面的代码为例:

public class Employee {
     private double salary;
     private String name;

     public Employee(String name) {
          this.name = name;
     }

     public Employee(String name, int salary) {
          this.name = name;
          this.salary = salary;
     }

}

现在,我想实现一个依赖于创建的对象的toString方法并输出相应的值。(即只输出名称,另一个输出名称和工资的方法)我只需要一个toString方法和需要添加if-else语句吗?

对不起,如果这是一个愚蠢的问题,我只是在学习Java的绳索。

3 个答案:

答案 0 :(得分:0)

您只能拥有一个 toString(),但您可以确定对象的“状态”并相应地将字符串放在一起。例如,您可以使用-1的工资表示第一个构造函数被调用。因此,您的toString()将如下所示:

@Override
public String toString() {
    if (salary < 0) {
        ...
    } else {
        ...
    }
}

不要忘记在第一个构造函数中将salary设置为-1

答案 1 :(得分:0)

首先,让你的薪水为负两倍(希望没有人付钱)...然后,将你的name字段默认为null。最后,检查toString()中的空值(或负数)。所以,像这样 -

private double salary = -1;
private String name = null;

public Employee(String name) {
  this.name = name;
}

public Employee(String name, double salary) { // <-- salary isn't an int.
  this.name = name;
  this.salary = salary;
}

public String toString() {
  StringBuilder sb = new StringBuilder();
  if (name != null) {
    sb.append(name);
    if (salary > 0) { // = only if both are valid.
      sb.append(" = ");
    }
  }
  if (salary > 0) {
    sb.append(salary);
  }
  return sb.toString();
}

答案 2 :(得分:0)

你在这里做的只是实例化构造函数,它与任何方法无关。构造函数只是帮助您初始化和排序,为您将要使用的变量提供上下文。

如果你说,打印或输出薪水和名字,你必须创建如下方法:

public String printName(){
       return name;
}

public String printAll(){
       return name + "" + String.valueOf(salary);
}