抽象
一、概述
1、 为什么需要抽象
有的时候,多个子类的方法声明相同、方法体不同;这个时候也可以抽取方法声明,不抽取方法体;从而让开发中知道该子类有这个特性,便于维护;
2、抽象类意义
(1)封装子类共有的属性和行为-------------代码复用
(2)为所有子类提供一种统一的类型---------向上造型
(3)为所有子类提供统一的方法入口 :每个子类的实现不同,但入口是一致的,入口就是抽象方法;
二、抽象类
1、 概述
当定义了抽象方法的类也必须被abstract关键字修饰,被abstract关键字修饰的类是抽象类。
2、 定义的格式:
abstract class 类名 {
}
3、 特征
抽象类和方法:抽象类和抽象方法都需要被abstract修饰。抽象方法一定要定义在抽象类中。抽象类中可以不定义抽象方法;
对象:抽象类不可以直接创建对象,原因:调用抽象方法没有意义。
子类:只有重写了抽象类中所有的抽象方法后,其子类才可以创建对象。否则该子类还是一个抽象类。
三、抽象方法
1、 概述
分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是方法功能声明相同,但方法功能主体不同。那么这时也可以抽取,但只抽取方法声明,不抽取方法主体。那么此方法就是一个抽象方法。
2、 定义格式
只有方法的定义,没有方法具体的实现(连{}都没有)
public abstract 返回值类型 方法名(参数);
四、抽象关键字
1、抽象关键字abstract不可以和哪些关键字共存?
l 1、private:私有的方法子类是无法继承到的,也不存在覆盖,而abstract和private一起使用修饰方法,abstract既要子类去实现这个方法,而private修饰子类根本无法得到父类这个方法。互相矛盾。
l 2、final,暂时不关注,后面学
l 3、static,暂时不关注,后面学
五、面试题
1, 抽象类中是否可以没有抽象方法?如果可以,那么,该类还定义成抽象类有意义吗?为什么?
可以没有抽象方法,有意义,不会让其他人直接创建该类对象