一、写在前面
1.基本作用
代码复用,更重要的就是有了继承机制后才会有后面的“方法重写”和“多态机制”。
2.语法格式
//Student类继承了Person类
public class Student extends Person {
}
注意:
- Java语言中的继承只支持单继承,即一个类只能继承一个类(但可以实现多个接口),在C++中支持多继承
- 在Java中所有的类都默认继承了 java.lang.Object 类
3.关于继承的一些术语
B类继承A类
B类称为:子类、派生类、SubClass
A类称为:父类、基类、超类、SuperClass
二、继承机制的要点
1.子类从父类中继承的数据
- 子类可以获得父类的所有成员数据
- 无法获得父类的构造方法
2.重写父类方法
1.什么情况下要重写父类方法?
当子类从父类继承过来的方法对于子类不太合身,不满足当前子类的业务需求,子类则有必要将该继承过来的方法进行重写.
例如:鸟类有飞翔这个方法,但是鸵鸟类继承类鸟类,鸵鸟不再适用飞翔这个方法,则有必要对此进行重写.
2.如何实现方法覆盖?
方法的重写要遵循"两同两小一大同静态"规则.
* 两同:方法名 / 形参列表相同.
* 两小:子类方法返回值类型和子类方法抛出的异常要比父类方法“小或相等".
* 一大:子类方法访问权限要比"大或相等".
* 同静态:静态/成员方法只能对应重写为静态/成员方法,不能改变这个方法的"静态性".
注意:
- 当子类方法覆盖父类方法后,但又想在子类方法中调用父类方法,可用super来调用父类成员方法,用父类名来调用父类静态方法.
- 当父类方法具有private访问权限时,该方法对于子类是隐藏的,子类对其无法访问、无法重写.
补充:
- overload:方法重载,发生在同一个类中
override:方法重写,发生在子类重写父类方法时
三、super关键字
1.如何理解super关键字?
可以把super翻译成"父类的".
2.super关键字的作用
在子类方法中访问父类成员:
1.当子类重写了父类的成员方法时,此时又想在子类方法中调用原来父类的成员方法,可用super调用.(例如你想要鸵鸟飞)
2.当子类定义了与父类同名的成员变量,此时从父类继承过来的成员变量会被隐藏,如果想在子类方法中访问父类的成员变量,可用super来访问父类成员变量.
注意:
- 这里被隐藏的成员数据,在子类对象创建时已经会为其分配内存空间(因为除了父类的构造方法外,其余数据都已经继承过来啦).
在子类的构造器中使用:
在子类构造器第一行中会默认存在一个super(),作用是调用父类的构造器,给当前子类对象中具有父类型特征的成员变量赋值.
注意:区分this在构造器中使用
this在构造器中的作用是在同一个类中的构造器里调用另一个重构的构造器.