abstract class和interface是Java语言中的两种定义抽象类的方式,它们之间有很大的相似性。但是对于它们的选择却又往往反映出对于问题领域中的概念本质的理解、对于设计意图的反映是否正确、合理,因为它们表现了概念间的不同的关系(虽然都能够实现需求的功能)。
总结几句话来说:
抽象类
1、由抽象方法和常量,变量,全局常量,构造方法,普通方法组成
2、使用abstract声明
3、子类要通过extends继承抽象类,子类如果不是抽象类,则必需实现抽象类中的全部抽象方法
4、存在单继承局限,一个子类只能继承一个抽象类
5、抽象类可以实现若干个接口
接口
1、全部由抽象方法和全局常量组成
2、使用interface声明
3、子类通过implements实现接口,子类如果不是抽象类,则必需实现全部接口方法
4、不存在单继承局限,一个类可以同时实现多个接口
5、接口不能继承一个抽象类,但是允许继承多个接口
特别是对于公用的实现代码,抽象类有它的优点。抽象类能够保证实现的层次关系,避免代码重复。然而,即使在使用抽 象类的场合,也不要忽视通过接口定义行为模型的原则。从实践的角度来看,如果依赖于抽象类来定义行为,往往导致过于复杂的继承关系,而通过接口定义行为能 够更有效地分离行为与实现,为代码的维护和修改带来方便。
abstract class与interface的差异
时间: 2024-11-05 14:47:47