【发布时间】:2014-04-06 13:45:24
【问题描述】:
在 HourlyEmployee 和 SalariedEmployee 子类中,我们调用 super() 将“名称”传递给基类构造函数。我有两个问题:
变量名从何而来,这是 aName 变量的拼写错误吗?
在这些子类中调用
setSalary()是如何工作的?
扩展 Employee 类是否为我们提供了 setSalary() 方法的副本,但是在该方法内部有 aSalary=salary;,其中薪水没有被继承,因为它是私有的,或者继承只是让我们使用 setSalary() 方法基类,这就是为什么使用 super() 来传递名称的原因。
public class Employee {
private String name;
private double salary;
public Employee(String aName) {
name = aName;
}
public void setSalary(double aSalary) {
salary = aSalary;
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
public double getWeeklySalary() {
return salary/52;
}
}
public class HourlyEmployee extends Employee {
public HourlyEmployee(String aName, double anHourlySalary) {
super(name);
setSalary(anHourlySalary*40*52);
}
}
public class SalariedEmployee extends Employee {
public SalariedEmployee(String aName, double anAnnualSalary) {
super(name);
setSalary(anAnnualSalary);
}
}
【问题讨论】:
-
您没有通过 super(name) 传递任何内容。你应该通过 super(aName)。
标签: java inheritance extend