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

how do i make the correct use of toString method in my following code?

我想在我的程序中按以下方式使用 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 方法,但我不确定。

你需要覆盖classemployeestockplan中的方法toString,这里你拼错了,不是tostring而是toString。是 Java 区分大小写。

回复更新:

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

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

输出:

50000.0 

注意: o 应该是 employee 类型而不是 Object,它会大大简化你的代码,你应该实现employee 中的方法 agrantstock 并在 manager 中覆盖它,这样你就不需要再用 instanceof 测试类型了。

这是因为您从未调用 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()