Java 继承和私有变量
在HourlyEmployee和SalariedEmployee子类中,我们调用Java 继承和私有变量,java,inheritance,extend,Java,Inheritance,Extend,在HourlyEmployee和SalariedEmployee子类中,我们调用super()将“name”传递给基类构造函数。我有两个问题: 变量名来自哪里?这是aName变量的输入错误吗 调用setSalary()如何在这些子类中工作 扩展Employee类是否为我们提供了setSalary()方法的副本,但在该方法中有aSalary=salary如果工资不是继承的,因为它是私有的,或者继承只是简单地让我们使用基类中的setSalary()方法,这就是为什么使用super()传递名称是有意义
super()
将“name”传递给基类构造函数。我有两个问题:
setSalary()
如何在这些子类中工作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);
}
}
aName
变量的输入错误吗
是的,是打字错误。应该是aName
,否则它将无法编译setSalary()
如何在这些子类中工作
扩展类时,子类继承超类中的所有功能。这就是为什么salariedeemployee
和HourlyEmployee
类可以访问setSalary()
方法的原因:它们都继承了Employee
类的功能
您应该注意,子类不直接访问salary
字段,而是通过setSalary()
和getSalary()
方法访问。这称为封装,用于限制对类成员的直接访问您没有通过任何具有super(名称)的内容。您应该传递super(aName)。那么getSalary()能够访问继承的但通常无法访问的私有变量吗?继承的getSalary()返回salary变量,可以吗?
getSalary()
可以访问私有成员,因为它是在同一个类中定义的。是的,getSalary()
返回salary
成员的值,即使在子类中也是如此。:)