继承和私有变量

use*_*819 4 java inheritance extend

在HourlyEmployee和SalariedEmployee子类中,我们调用super()将"name"传递给基类构造函数.我有两个问题:

  1. 变量名称来自何处,这是aName变量的拼写错误?

  2. 如何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)

Kon*_*kov 6

  1. 变量名来自何处,这是aName变量的拼写错误吗?

    是的,这是一个错字.应该是aName,否则就不会编译.

  2. 如何setSalary()在这些子类中调用工作?

    扩展类时,子类继承了超类中的所有功能.这就是SalariedEmployeeHourlyEmployee类可以访问setSalary()方法的原因:它们都继承了Employee该类的功能.

    您应该注意,子类不salary直接访问该字段,而是通过setSalary()getSalary()方法访问.这称为封装,它用于限制对类成员的直接访问.