举例:
犬:
行为:共有的行为 吼叫;吃饭;共有的行为,而且行为不明确没法定义方法体,定义为抽象方法,也就是抽象类
缉毒犬:
行为:共有的行为 吼叫;吃饭;共有的行为
缉毒;额外行为 定义为接口
从上面的案例分析可以得出抽象类和接口的区别
相同点:
都位于继承的顶端,用于被其他类实现或继承;
都不能直接实例化对象;
都包含抽象方法,其子类都必须覆写这些抽象方法;
区别:
抽象类为部分方法提供实现,避免子类重复实现这些方法,提高代码重用性;接口只能包含抽象方法;
一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
抽象类是这个事物中应该具备的内容
接口是这个事物中的额外内容
二者的选用:
优先选用接口,尽量少用抽象类;
需要定义子类的行为,又要为子类提供共性功能时才选用抽象类;