继承 即 在已有结构的基础上进行功能的扩充
假如你在一个公司工作,公司中经理和普通员工的待遇有些差异,但他们之间也存在很多共同的地方。例如,他们都领取薪水。而经理在完成了预期的业绩之后还能额外得到奖金。
这种情形 就需要用到继承。为经理新建一个类,以便增加一些新的功能,同时可以重用普通员工类中已经编写好的部分。
继承的目的
- 代码重用,子类重用父类代码
- 功能扩充,子类扩充父类功能
具体实例
- 使用
extends
关键字实现继承
extends
表明正在构造一个新类派生与一个已存在的类。已存在的类称为超类(superclass)、基类(base class)或者父类(parent class);新类称为子类(subclass)、派生类(derived class)或者孩子类(child class)。
public class Manager extends Employee{
private double bonus;
public double getBonus() {
return bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
}
继承的限制
- Java只允许单继承
- Java运行多层继承,但最好不超过三层
- 子类可以继承父类所有操作结构,但私有操作为隐式继承,不能直接访问
对于
Manager
而言,其中的getSalary()
方法应该返回薪水与奖金的总和。为此应该 重写 父类中的这个方法。
public class Manager extends Employee{
...
@Override
public double getSalary() {
return super.getSalary() + bonus;
}
}
注意,我们在访问父类
salary
属性的时候,并没有使用super.salary
直接访问,而是调用父类的对外公共访问接口super.gerSalary()
进行访问。这是因为,子类不能直接访问父类的私有域,必须借助其对外公共访问接口。
重写的限制: 被重写的方法不能拥有更严格的访问控制权限
public > protected > default > private
重载与重写的区别
中文名称 | 重载(overloading) | 重写(override) |
---|---|---|
概念 | 方法名称相同,参数类型个数不同 | 返回值、方法名称、参数类型及个数都相同 |
权限 | 无权限限制 | 被重写的方法不能拥有更严格的访问控制权限 |
范围 | 同一类中 | 发生在继承关系中 |
this 与 super 的区别
this
: 先从本类查找所需的属性或方法,本类不存在该属性或方法时,从父类查找。super
: 直接从父类查找。this
与super
都可以进行构造方法的调用。this
调用本类构造方法。super
调用父类构造方法。this
与super
都必须方法首行,所以不能同时出现。this
可以表示当前对象
final关键字
final
修饰类,类不能被继承final
修饰方法,方法不能被重写final
修饰变量,变量不能被修改,成为常量