Java 继承和私有变量

Java 继承和私有变量,java,inheritance,extend,Java,Inheritance,Extend,在HourlyEmployee和SalariedEmployee子类中,我们调用super()将“name”传递给基类构造函数。我有两个问题: 变量名来自哪里?这是aName变量的输入错误吗 调用setSalary()如何在这些子类中工作 扩展Employee类是否为我们提供了setSalary()方法的副本,但在该方法中有aSalary=salary如果工资不是继承的,因为它是私有的,或者继承只是简单地让我们使用基类中的setSalary()方法,这就是为什么使用super()传递名称是有意义

在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);
        }
    }
    
  • 变量名来自哪里?这是
    aName
    变量的输入错误吗

    是的,是打字错误。应该是
    aName
    ,否则它将无法编译

  • 调用
    setSalary()
    如何在这些子类中工作

    扩展类时,子类继承超类中的所有功能。这就是为什么
    salariedeemployee
    HourlyEmployee
    类可以访问
    setSalary()
    方法的原因:它们都继承了
    Employee
    类的功能

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

  • 公共雇员(字符串aName)是公共的,所以您可以从扩展类调用它
  • 私有字段和方法继承自扩展类,但不能从扩展类访问它们。如果您使用调试器,您可以看到私有字段是继承类的一部分,但您没有可见性

  • 您没有通过任何具有super(名称)的内容。您应该传递super(aName)。那么getSalary()能够访问继承的但通常无法访问的私有变量吗?继承的getSalary()返回salary变量,可以吗?
    getSalary()
    可以访问私有成员,因为它是在同一个类中定义的。是的,
    getSalary()
    返回
    salary
    成员的值,即使在子类中也是如此。:)