抽象类,抽象方法和接口是java基础里面比较重要但是容易混淆的知识点,在实际运用的时候因为具有很多共同点所以也会有时候也会不知道用什么或者用错,正好借这个机会整理一下这方面的知识~~_~
(欢迎互关,一起学习进步!)
抽象类和抽象方法
- 关键字
abstract
修饰的类是抽象类,修饰的方法就是抽象方法(这解释完美了) - 抽象类代码如
abstract class 类名{//...}
- 抽象方法代码如
[访问限定词] abstract 数据类型 方法名 ([参数列表]);
- 抽象类不能生成对象实例,也就是不能
new
对象 - 抽象方法只有方法的头部没有方法体,抽象方法一定不能用final修饰
抽象类和抽象方法的联系
- 抽象类中如果有抽象方法就必须定义成抽象类
- 抽象类的子类如果不能实现父类的抽象方法,那就也得定义成抽象类
- 具体子类(派生类)必须覆盖父类(基类)的抽象方法
- 派生类可以覆盖抽象方法,也可以不覆盖,如果不覆盖那其具体派生类必须覆盖他们
接口
- Java接口是由若干常量和方法声明组成的集合
- 接口中的方法只有声明没有实现
- 这些方法可以在不同的地方被不同的类实现,而这些实现可以有不同的行为(功能)
- 定义接口的目的在于规范对象的行为,告诉实现接口的实现者要做什么,而不要求怎么做,由实现者根据自身情况决定怎么做
- 接口中定义的常量是接口的特征属性,用于规范接口要求
- 接口中不能包含常量、字段(域)、构造函数、析构函数、静态成员
- 代码如
[修饰符] interface 接口名称 [extends父接口名列表]
{
[public] [static] [final] 数据类型 变量名 = 常量值;
[public] [abstract] 返回值类型 方法名(参数列表)
}
接口和抽象类的区别:
- 抽象类中既可以包含抽象方法,也可以包含非抽象的普通方法;而接口中的方法必须是抽象方法
- 抽象类中的抽象方法的访问类型可以是
public、protected、default
,但接口中的抽象方法只能是public
类型的- 抽象类中可以有普通成员变量,而接口中的所有变量均为
public static final
修饰,即均为常量- 抽象类里可以有构造方法,而接口中不能有构造方法
- 抽象类里可以有静态方法,而接口中不能有静态方法
6, 一个类可以实现多个接口,但只能继承一个抽象类- 如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法
接口和抽象类的相同点
- 都可以被继承
- 都可以包含方法声明
- 都不可以实例化
- 派生类必须实现未实现的方法