我想在我的程序中使用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
方法,但后来我不确定。
答案 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() 。