在 HourlyEmployee 和 SalariedEmployee 子类中,我们调用 super()
将“name”传递给基类构造函数。我有两个问题:
变量名从何而来,这是 aName 变量的拼写错误吗?
在那些子类中调用
setSalary()
是如何工作的?
扩展 Employee 类是否为我们提供了 setSalary()
方法的副本,但在该方法内部有 aSalary=salary;
,其中薪水不会被继承,因为它是私有(private)的或者继承只是让我们使用基类的 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);
}
}
最佳答案
变量名称从何而来,这是
aName
变量的拼写错误吗?是的,这是一个错字。应该是
aName
,否则无法编译。在那些子类中调用
setSalary()
是如何工作的?当扩展一个类时,子类继承父类(super class)的所有功能。这就是为什么
SalariedEmployee
和HourlyEmployee
类可以访问setSalary()
方法:它们都继承了功能来自Employee
类。您应该注意,子类不直接访问
salary
字段,而是通过setSalary()
和getSalary()
方法。这称为封装,用于限制对类成员的直接访问。
关于java - 继承和私有(private)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22181866/