super:
- 调用超类的方法
- 调用超类的构造器
this: - 引用隐式参数
- 调用该类的其它构造器
注意📢:
如果子类的构造器没有显示地调用超类的构造器,则将自动的调用超类默认的构造器。如果超类没有不带参数的构造器,并且在子类的构造器中又没有显式的调用超类的构造器,则Java编译器将会爆出编译错误❌。
一个对象变量,例如变量e可以只是多种实际类型的现象被称为多态,在运行时能够自动的选择调用那个方法的现象被称为多态绑定。
继承关系父类-employee
package corejava.chapter5;
import java.time.LocalDate;
/**
* @Auther WangYu
* @Date 2022/3/5
* 构建一个员工实体类
*/
public class Employee {
private String name;
private double salary;
private LocalDate hireDay;
public Employee(String name, double salary, int year, int month, int day){
this.name = name;
this.salary = salary;
this.hireDay = LocalDate.of(year , month, day);
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
public LocalDate getHireDay() {
return hireDay;
}
public void raiseSalary(double byPercent){
double raise = salary* byPercent / 100;
salary = salary + raise;
}
}
继承关系的子类-管理者,特殊的员工,有特殊的新手计算方式
package corejava.chapter5;
/**
* @Auther WangYu
* @Date 2022/3/5
* 一个管理者的实体类,测试继承的使用方法
*/
public class Manager extends Employee{
private double bonus;
public Manager(String name, double salary, int year, int month, int day) {
super(name, salary, year, month, day);
bonus = 0;
}
public double getSalary(){
double baseSalary = super.getSalary();
return baseSalary + bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
}
调用计算的方法计算员工工资:父类+子类
package corejava.chapter5;
/**
* @Auther WangYu
* @Date 2022/3/5
* 一个管理者的实体类的测试方法
*/
public class ManagerTest {
public static void main(String[] args) {
// construct a Manager object
Manager boss = new Manager("CC", 80000, 1999, 12, 11);
boss.setBonus(200);
Employee[] staff = new Employee[3];
staff[0] = boss;
staff[1] = new Employee("王三狗", 6000, 2020, 10, 10);
staff[2] = new Employee("王小五", 100000, 2022, 12, 12);
for (Employee employee : staff) {
System.out.println("name = " + employee.getName() + ",salary = " + employee.getSalary());
}
}
}