问题在于:
将营销人员写入本章所述的其他律师事务所课程。营销人员赚了5万美元(比一般员工多10,000美元),还有一个名为广告的额外方法,打印出“现在行动,供应持续!”确保根据需要与Employee超类进行交互。
到目前为止的代码:
public class Marketer extends Employee {
public Marketer() {
setBaseSalary(super.getSalary() + 10000.0);
}
public void advertise() {
System.out.println("Act now, while supplies last!") ;
}
}
这是输出应该是:
50000.0
75535.0
立即行动,供应持续!
以下网站上有一个名为 Employee.java 的文件扩展名,代码如下: http://practiceit.cs.washington.edu/problem.jsp?id=1324
所以到目前为止,它打印出了所有预期的结果 除了75535.0 ! 我哪里做错了?? 当我运行代码时,它说这个(对于我在75535.0部分收到的错误):
(将基本工资改为$ 65535.00)
因为我的输出是65535.0,比答案应该小10000。
我似乎无法找到错误,因为我刚开始用Java做这些继承类的东西,所以我仍然不熟悉它。谢谢你,如果你能帮助我理解我搞砸了。
答案 0 :(得分:2)
以下是发生的事情:
创建营销人员,调用Employee的构造函数和实例初始化。这将baseSalary
设置为40,000。然后,您在Markerter构造函数中的代码将运行并将baseSalary
设置为50,000。他们的测试驱动程序调用{{1}}值为65535.0,覆盖您的初始集。
您的代码未与Employee类正确交互。 setBaseSalary
中的评论表示您的代码不应使用,调用或修改以下值。其中一个是Employee.java
变量,您要在baseSalary
构造函数中对其进行修改。一旦测试驱动程序更改了值,您的类就无法计算Marketer
的更改工资。
您不应该在构造函数中调用Marketer
。相反,在Marketer中覆盖setBaseSalary
,并使用您自己班级中Employee的getSalary
方法。
答案 1 :(得分:0)
这是我的解决方案示例:
public class Marketer extends Employee {
public void advertise() {
System.out.println("Act now, while supplies last!");
}
public double getSalary() {
return super.getSalary() + 10000;
}
}
它可以帮助您更好地理解问题。
答案 2 :(得分:0)
解决您的问题很简单。只需将Marketer类定义如下
public class Marketer extends Employee {
public void advertise() {
System.out.println("Act now, while supplies last!") ;
}
@Override
public double getSalary() {
return super.getSalary() + 10000.0; // $40,000.00
}
}
这里我们覆盖Employee类的getSalary方法,每当我们必须返回工资时,我们将10000添加到员工工资中。
希望这有帮助