前提背景在面试到
Java
基础知识的时候,总喜欢问抽象类
和接口
的区别,在这里记录一下自己复习的笔记
抽象类 abstract class
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
- 使用
abstract
修饰的类 - 不直接可以
实例化
- 内部可以声明
abstract
修饰的方法(只有方法头,没有方法体) - 内部也可以声明普通的成员方法(包含方法头,和方法体)
思考:
抽象类内部是不是必须要有抽象方法呢?不是必须!
抽象方法是不是必须声明在抽象类内部呢?必须的!
接口 interface
- 使用
interface
修饰的类 - 不直接可以
实例化
- 内部只能声明
public abstract
方法 (只有方法头,没有方法体,public abstract
声明可以不写,因为默认)
区别与联系
- 区别
- 抽象类中
可以有
普通的成员方法,接口只有
抽象方法 - 抽象类中的方法可以有
public
,private
,protected
修饰方法,接口只有public
- 抽象类可以有构造器,接口没有构造器,
抽象类依然是属于类的范畴
,(抽象类如果定义了含有参数的构造函数
Parent(int a)
,子类集成时必须
在构造函数中显式调用父类
的改构造器进行初始化super(a)
) -
Java
中只能集成一个类,可以实现多个接口
- 抽象类中
- 联系
- 接口声明能力,抽象类提供默认的实现,在编码时可以选择全部重写还是部分重写来实现自己的逻辑,例如
Collection接口和对应的AbstractCollection抽象类
- 接口声明能力,抽象类提供默认的实现,在编码时可以选择全部重写还是部分重写来实现自己的逻辑,例如
其他思考
- 抽象类的意义
- 对实现其的子类一种强制规范,子类必须实现抽象父类的所有抽象方法
网友评论