在开发中,不要直接继承实现好的类,而要继承抽象类或者实现接口。
普通类无法强制要求子类覆写方法,所以产生抽象类和接口。
(一).抽象类的定义与使用
1.抽象类的定义与使用
抽象类比普通类多了抽象方法(0…N)(是普通类的超集)
抽象类使用abstract
关键字定义
抽象类不能直接实例化对象,
抽象方法:使用abstract关键字定义并且没有方法体的方法。
public abstract void print();
本地方法(调用C或者其他语言的同名方法):public native void print();
没有方法体的方法不一定是抽象方法,也有可能是本地方法。
2.抽象类的使用原则
(1)抽象类必须有子类(abstract 与 final 不能同时出现,否则编译时出错)
(2) 子类(不是抽象类)必须覆写抽象类的所有抽象方法
(3)抽象类可以利用子类向上转型来实例化父类对象
(4)由于抽象类强制要求子类覆写抽象方法,因此abstract 不能与 private 一起使用(编译出错);
3.抽象类的相关规定(考点)
3.1 *****
抽象类存在构造方法,并且子类也按照实例化流程,先调用抽象类的构造方法,再调用子类的构造方法。
3.2
抽象类可以不定义抽象方法,但此时仍然无法直接实例化对象。
3.3
final
与abstract
不能同时出现;private
与abstract
不能同时出现。
3.4
抽象类也分为外部抽象类与内部抽象类。
内部抽象类的抽象方法与外部抽象类的抽象方法无关。
当前直接继承哪个抽象类,就覆写其抽象方法。(若直接继承外部抽象类,则只需要覆写外部抽象类的所有抽象方法即可)
(二)对象实例化流程
- 类加载
- 类对象的空间开辟
- 类对象的构造方法初始化
(三)模板设计模式
学习设计模式方法:找到第三方
开闭原则(OCP):一个软件实体如类,函数,接口应该对扩展开放,对修改关闭。
模板方法定义了一个算法的步骤(封装算法),并允许子类为一个或多个步骤提供具体实现
第三方:模板类(模板方法)