概念
继承可以为一系列相关对象定义共同特征的一般类,然后其他类(更特殊的类)可以继承这个一般类,每个进行继承的类都可以添加其特有的内容。
被继承的类称为超类(super class)/父类,继承的类称为派生类/子类(subclass)。
一旦创建了一个定义一系列对象共同特征的超类,就可以使用该超类创建任意数量的更特殊的子类
Java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起继承关系。
public class Student extends Person{}
这里的Student 被称为子类,Person被称为父类。
继承的特点
Java只支持单继承,不支持多继承,但是支持多层级继承。
每一个类都直接或间接的继承于Object
- 单继承:一个子类只能继承一个父类。
- 不支持多继承:子类不能同时继承多个父类。
- 多层继承:子类A继承父类B,父类B可以继承父类C
继承的优点
可以把多个子类中重复的代码抽取到父类中,提高代码的复用性。
子类可以在父类的基础上,增加其他的功能,使用子类更强大。
子类可以从父类继承属性和部分方法,自己再增加新的属性和方法。通过继承可以重用父类的方法和属性,减少代码重复编写,便于维护、代码扩展。
案例1
父类:Person:name age sex sleep()
子类:Student:grade score study()
子类:Teacher:college course teach()
案例2:
父类:Animal:name color age eat(); “动物吃东西!”
子类:Dog:layal watch(); “忠诚地看家护院”
子类:Cat:wakan CatchMouse(); “聪明地捉老鼠”
案例3:
父类:Box:length width height volume()
子类:WeightBox:weight
子类:ColorBox:color
当类与类之间,存在相同(共性)的内容,并满足子类是父类中的一种,就可以考虑使用继承,并优化代码。
能否被继承 | 非私有 | private |
---|---|---|
构造方法 | 不能 | 不能 |
成员变量 | 能 | 能(不能直接使用) |
成员方法 | 能 | 不能 |
重写:
当父类的方法不能满足子类现在的需求时,需要进行方法重写。
在继承体系中,子类出现了和父类种中一摸一样的方法声明,我们就称为子类这个方法是重写的方法。
方法重写注意事项和要求
重写方法的名称,形参列表必须与父类中的一致
子类重写父类方法时,访问权限子类必须大于等于
子类重写父类方法时,返回值类型必须小于等于父类
重写的方法尽量和父类保持一致(建议)
私有方法不能被重写
子类不能重写父类的静态方法,如果重写会报错
继承中成员方法的访问特点
this调用,就近原则
super调用,直接找父类