use*_*819 4 java inheritance extend
在HourlyEmployee和SalariedEmployee子类中,我们调用super()将"name"传递给基类构造函数.我有两个问题:
变量名称来自何处,这是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);
}
}
Run Code Online (Sandbox Code Playgroud)
变量名来自何处,这是aName变量的拼写错误吗?
是的,这是一个错字.应该是aName,否则就不会编译.
如何setSalary()在这些子类中调用工作?
扩展类时,子类继承了超类中的所有功能.这就是SalariedEmployee和HourlyEmployee类可以访问该setSalary()方法的原因:它们都继承了Employee该类的功能.
您应该注意,子类不salary直接访问该字段,而是通过setSalary()和getSalary()方法访问.这称为封装,它用于限制对类成员的直接访问.