1

这是问题所在:

编写营销人员课程以配合本章中描述的其他律师事务所课程。营销人员赚了 50,000 美元(比一般员工多 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 做这些继承类的事情,所以我仍然不熟悉它。如果你能帮助我了解我搞砸的地方,谢谢。

4

3 回答 3

2

这是正在发生的事情:

创建Marketer,它调用Employee 的构造函数和实例初始化。设定baseSalary为 40,000。然后您在 Markerter 构造函数中的代码运行并设置baseSalary为 50,000。他们的测试驱动程序调用setBaseSalary值为 65535.0,覆盖了您的初始设置。

您的代码未与 Employee 类正确交互。中的注释Employee.java说您的代码不应该使用、调用或修改以下值。其中之一是baseSalary变量,您正在Marketer构造函数中对其进行修改。一旦测试驱动程序更改了值,您的班级就无法计算Marketer.

你不应该调用setBaseSalary你的构造函数。相反,getSalary在 Marketer 中重写,并getSalary在您自己的类中使用来自 Employee 的方法。

于 2013-04-06T06:19:56.900 回答
0

这是我的解决方案示例:

    public class Marketer extends Employee {
        public void advertise() {
            System.out.println("Act now, while supplies last!");
        }
        public double getSalary() {
            return super.getSalary() + 10000;
        }
    }

它应该可以帮助您更好地理解问题。

于 2013-04-06T06:23:00.187 回答
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 加到员工薪水上。

希望这可以帮助

于 2013-04-06T06:32:42.247 回答