如何在以下代码中正确使用toString方法?

时间:2016-06-13 12:16:55

标签: java tostring

我想在我的程序中使用tostring()方法以下列方式打印指定的值:

class employee
{
    double b;
}
class manager extends employee
{
}
public class employeestockplan
{
    static Object o;
    public void agrantstock()
    {
        if(o instanceof manager)
        {
            ((employee) o).b = 80000;
        }
        else if(o instanceof employee)
        {
            ((employee) o).b  = 50000;
        }
    }

    public String toString()
    {
        return ((employee) o).b+" ";
    }
    public static void main(String[] args)
    {
        o = new employee();
        employeestockplan t = new employeestockplan();
        System.out.println(t);
    }
}

但是输出是0.0,我应该在哪里修改我的程序?我个人认为我错误地指出o是否是员工的对象或管理员错误使用toString方法,但后来我不确定。

2 个答案:

答案 0 :(得分:2)

您需要覆盖班级toString中的方法employeestockplan,此处拼写错误,不是tostring而是toString。是的Java区分大小写。

响应更新:

你永远不会在当前代码中调用agrantstock(),这就是你得到0的原因。试试这个:

employeestockplan.o = new employee();
employeestockplan t = new employeestockplan();
t.agrantstock();
System.out.println(t);

<强>输出:

50000.0 

NB: o应该是employee类型而不是Object,它会简化您的代码并且您应该实现一个方法{{1在agrantstock中并以employee覆盖它,这样您就不再需要使用instanceof来测试类型了。

答案 1 :(得分:1)

因为你从不调用 agrantstock()方法将值赋给 b

您可以通过将静态属性设置为 Employee 而不是 Object 来简化该方法。以下是代码的略微修改版本,也经过修改以遵循标准命名约定:

class Employee {
    double b;
}

class Manager extends Employee {
}

public class EmployeeStockPlan {

    static Employee employee;

    public void grantStock() {
        if (employee instanceof Manager) {
            employee.b = 80000;
        } else {
            employee.b = 50000;
        }
    }

    public String toString() {
        return ((Employee) employee).b + " ";
    }

    public static void main(String[] args) {
        employee = new Employee();
        EmployeeStockPlan stockPlan = new EmployeeStockPlan();
        stockPlan.grantStock();
        System.out.println(stockPlan);
    }
}

请注意在main方法中添加 stockPlan.grantStock()