繁体   English   中英

我对Java继承还很陌生,我不明白为什么会出错?

[英]I am fairly new to Java Inheritance and I don't understand why I have an error?

这是问题所在:

编写“市场营销人员”课程,以配合本章中介绍的其他律师事务所课程。 营销人员的年薪为50,000美元(比一般雇员多10,000美元),并且有一种名为advertise的附加方法,可以打印“立即行动,用完为止! 确保与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中进行这些继承之类的操作以来,我似乎找不到该错误,因此我仍然不熟悉它。 谢谢您能帮助我了解我的问题。

这是正在发生的事情:

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

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

您不应在构造函数中调用setBaseSalary 而是在Marketer中重写getSalary ,并在您自己的类中使用Employee中的getSalary方法。

这是我的解决方案示例:

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

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

解决您的问题很简单。 只需如下定义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。

希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM