继承
概念
-
向上抽取共性,把相同的内容定义在父类中
什么情况下使用继承
-
必须满足 is a 的关系
-
什么 是 什么 的一种
好处
-
子类可以使用父类除private修饰和构造方法以外的内容
-
提高了代码的复用性
-
让类与类之间产生了关系(父子类的关系)
-
是多态的前提
定义
-
关键字:extends
-
格式:子类 extends 父类
成员变量的访问特点
-
成员变量不重名
-
子类有,用子类,没有,找父类
-
子类可以找父类,父类不能找子类
-
-
成员变量重名
-
优先调用子类成员,子类没有调用父类
-
就近原则
-
this(从本来成员位置开始向上找)/super(从父类成员位置开始向上找)
-
成员方法的访问特点
-
不重名
-
先找子类,没有找父类,优先使用子类自己的.
-
-
重名
-
称为方法重写/覆盖(返回值类型,方法名,参数列表都相同).
-
可使用@Override朱姐检测子类方法是否对父类重写
-
方法重写快捷键:Ctrl+o
-
-
既沿袭了父类的功能名称,又可根据需要重新实现父类方法,从而进行扩展增强
-
方法重写注意事项
-
子类方法覆盖父类方法,访问权限必须等于或大于父类权限(public > protected > 默认(什么都不写) > private)
-
返回值类型、函数名和参数列表都要一样,并且不能抛出更多的异常.
-
必要条件:1.函数名和参数列表都要一样 2.子类不能抛出比父类更多的异常
-
可选条件: 返回值类型可以不一样,子类覆盖重写后的方法返回值类型 <= 父类方法返回值类型
-
-
-
- 私有方法不能被重写(父类私有成员子类是不能继承的)
构造器的访问特点
-
构造方法与类名相同,所以子类无法继承.
-
子类创建对象调用构造方法时,必须先调用父类构造方法,完成父类成员的初始化动作,子类才可以使用父类的成员,super()表示调用父类的空参构造.
-
子类的构造方法中,会在第一句默认提供super()调用父类的空参构造.
-
构造方法可以重载,所以可以使用super(...)调用父类带参数的构造方法.
继承的特点
-
只能单继承,不能多继承.(一个儿子,一个亲爹)
-
继承能多层继承.(爷爷-爸爸-儿子···)
-
一个父类可以拥有多个子类
抽象类
概念
-
在类的设计中,把说不清楚的,不够具体的,但是子类要有的功能,在父类中声明为抽象方法,此时的类就必须是抽象类。父类具体无法实现的方法称为抽象方法,即父类不管,子类自己决定。
抽象类中抽象方法的存在意义
-
强制要求子类必须具备的能力
关键字
-
abstract
定义
-
抽象类:public abstract class 类名{}
-
抽象方法:public abstract 返回值类型 方法名(参数);
-
和普通方法定义一样,但是去掉{},添加abstract关键字.
-
返回值类型,根据情况需求定义.
-
-
抽象方法肯定是作为父类来使用.
注意
-
抽象方法所在的类一定是抽象类.
-
抽象类中不一定非得有抽象方法
-
子类继承抽象父类之后,需要重写抽象方法
-
抽象类不能new对象
-
抽象类中可以有成员变量和构造方法.