一、概述
继承(inheritance)的基本思想是:可以基于已有的类(父类)创建新的类(子类)。继承已存在的类就是继承这些类的方法和字段,并可以添加一些新的方法和字段。使新类能够适应新的情况。
定义子类
//关键字 extends 表示继承
public class Manager extends Employee{
......
}
覆盖方法
//父类中
public double getSalary() {
return salary;
}
//子类中
//覆盖重写
@Override
public double getSalary() {
return super.getSalary() + bonus;
}
覆盖注意事项
- 必须保证父子类方法名 参数列表相同
- 子类的方法返回值范围小于等于 父类的返回值范围
- @Override:用来检测是不是正确的覆盖重写
super关键字
用来访问父类内容:
- 在子类成员方法中,访问父类的成员变量
- 在子类成员方法中,访问父类的成员方法
- 在子类构造方法中,访问父类的构造方法
this关键字
用来访问本类内容 - 在本类成员方法中,访问本类的成员变量
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
- 在本类成员方法中,访问本类的成员方法
public void methodB(){
this.methodA(); //可以简写为 methodA();
}
- 在本类构造方法中,访问本类的构造方法
public Employee(String name, double salary) {
this(); //必须是第一个语句,也是唯一一个this
this.name = name;
this.salary = salary;
}
二、代码实现
Employee.class
public class Employee {
private String name;
private double salary;
public Employee() {
}
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
Manager.class
public class Manager extends Employee{
private double bonus;
public Manager() {
//里面有一个默认的super()调用
//super() 调用父类无参构造法
//只有子类构造方法才能调用父类构造方法
//super() 只能是第一个语句
}
public Manager(String name, double salary, double bonus) {
super(name, salary); //调用父类重载有参构造法
this.bonus = bonus;
}
public double getBonus() {
return bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
//覆盖重写
@Override
public double getSalary() {
return super.getSalary() + bonus; //调用父类的方法
}
}
Demo01Inheritance.class
public class Demo01Inheritance {
public static void main(String[] args) {
Manager boss = new Manager("张三",30000,100000);
Employee[] staff = new Employee[3];
staff[0] = boss;
staff[1] = new Employee("李四",10000);
staff[2] = new Employee("李无",10000);
for (int i = 0; i < staff.length; i++) {
System.out.println(staff[i].getName()+"的工资是"+staff[i].getSalary());
}
}
}