抽象类和接口是相似的两个单元。不同的是抽象类作为一种专用父类,用extends实现。而接口作为一种专门的规范,用implements实现。接口比抽象类更纯粹的实现了声明和实现的分离。
抽象类
抽象类可以看作是一个专门的父类,为所有的子类提供一个通用的模板,另外能避免子类设计的随意性,严格限制子类的设计。
抽象类也是一个类,只是比普通的类多了抽象方法。抽象方法是指只有声明,而没有实现的方法,用abstract说说那个命,相应的类也需要用abstract声明。
抽象类有下面几个特点:
- 包含抽象方法的类只能定义为抽象类
- 抽象类不能实例化,不能直接new出来
- 抽象类可以包含属性、方法、构造方法,但是不能new出来实例,只能被子类调用
- 抽象类只能用来继承
- 抽象方法需要被子类实现,子类必须覆写所有的抽象方法之后才能被实例化,否则这个子类还是个抽象类
接口
接口本质上是一个规范,专业的实现了方法的声明和实现的分离。接口是比抽象类还要抽象的类,更纯粹的做了方法声明。接口就像是一种约定,约定了类中应该包含什么方法,但是并不写方法的实现
- 接口中的数据成员必须初始化,而且数据成员必须为常量。默认被final声明
- 接口中的方法全部是抽象方法,用abstract声明,不能包含一般的方法
两者的区别
- 接口是一种规范,用implements实现,抽象类是一种专门的父类,用extends实现
- 接口中不能包含方法实现,抽象类中可以包含方法实现
- 接口将方法声明和实现完全分离,抽象类中还能够包含方法实现