我是Java继承的新手,我不明白为什么我有错误?

时间:2013-04-06 06:07:54

标签: java inheritance

问题在于:

将营销人员写入本章所述的其他律师事务所课程。营销人员赚了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做这些继承类的东西,所以我仍然不熟悉它。谢谢你,如果你能帮助我理解我搞砸了。

3 个答案:

答案 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添加到员工工资中。

希望这有帮助