文字数:约1400字 阅读时间:20分钟
一. 抽象类
1. 定义:使用了abstract声明的类叫做抽象类,如果一个类中包含了一个或多个抽象方法,那么这个类就必须声明为抽象类,其格式为:public abstract class 类名{}
(抽象类中不一定有抽象方法,而有抽象方法的一定为抽象类)
2. 抽象方法
1) 概念:当一方法没有具体的内容,只有抽象的功能描述,那么这个方法可以写为一个抽象方法
(简单的可以理解成没有功能体的方法都可以看成抽象方法(目前本人是这样理解的))
2) 格式:public abstract 返回值类型 方法名(参数)
3) 应用:抽象方法可以理解为是父类对子类提的要求,要求子类必须重写某个方法,不重写语法报错
(抽象类可以理解成抽取子类共有需求(功能)的一个类)
4) 特点
a. 抽象类无法直接创建对象,只能被子类继承后,创建子类对象
b. 抽象类一定是一个父类,因为抽象类是不断抽取共性需求而来的
c. 抽象类中可以不定义抽象方法,但是有抽象方法的类一定是抽象类
d. 如果抽象类A定义了一个抽象的a方法,如果B类继承A的的时候,没有重写a方法,B类也必须抽象!
(抽象类不可通过关键字new获取类中的方法或变量,只能通过其子类来使用!抽象只能定义类和方法)
为了更好理解抽象类,如下图,简单的阐述了抽象类的使用情况:
父类(员工)为抽象类,里面定义了一个抽象方法(工作),其下面的两个子类(研发部员工和维护部员工),因并没有实现具体的功能体,所以必须定义为抽象类。然后其孙子类(研发部员工和维护部员工各自的子类)继承并各自完成了抽象方法的功能体。
二. 接口
1. 概念:接口指一堆功能的集合,不涉及具体的功能实现,只有抽象的功能描述(抽象方法)
2. 定义格式:
1) 格式:Public interface 接口名{}
2) 包含成员
a. 常量:public static final 常量名=数据值
常量只能赋值一次,一旦赋值将不能更改
b. 抽象方法
public abstract 返回值类型 方法名(参数);
3. 特点
a. 接口中只能定义常量和抽象方法,无法定义普通的成员变量和方法
b. 接口中的方法均为公共访问权限的抽象方法,不写自动加上public abstract
c. 接口是一种特殊的抽象类,即接口也不可以创建对象
d. 子类必须覆盖接口中的所有方法,不然子类无法实例化,即子类为抽象类,无法创建对象
(总的来说,接口就是特殊的抽象类,不能定义普通方法和成员也不能通过new获取对象,还有【public abstract】可以省略不写但要记住接口中的方法都是抽象方法)
4. 类与接口的实现关系
1) 定义
a. 类与接口的关系为实现关系,即类实现接口
b. 实现的动作类似继承,只是关键字不同,实现使用 implements
2) 格式
class 类 implements 接口 {重写接口中方法}
3) 应用
a. 在类实现接口后,该类就会将接口中的抽象方法继承过来
b. 在具体实现类中重写方法,实现功能,是接口中方法的具体实现
5. 接口和抽象类的区别
1) 相同点
a. 都位于继承顶端(父类),用于被其他类实现或继承
b. 都不能直接创建对象,只能通过子类创建对象
2) 区别
a. 抽象类中可以定义其他方法,可以为其他方法提供具体实现的方法,避免子类重复实现,接口只能包含抽象方法
b. 一个类只能继承一个直接父类(可以是抽象类),却可以实现多个接口,接口弥补了Java的单继承
c. 抽象类中可以定义成员变量和成员方法,而接口中只能定义常量和抽象方法
d. 抽象类中有构造方法可以为成员变量初始化,而接口中没有
接口与抽象类的区别理解图
(抽象类和接口区别可以往实现的功能方面想,即抽象类是共同的功能,而接口是额外(独有)的功能,推荐多用接口方式(不管是共同的功能还是额外的功能都定义成接口类),因为实现类可以同时实现不同的接口,弥补了java类中不可多继承的缺点)