(一)语法上的区别:
1.接口中的方法必须都是抽象的public abstract,不能有方法体;而抽象类中可以定义普通方法,可以有方法体;
2.接口中的属性必须都是public static final的常量,而抽象类无此限制;
3.接口支持多实现,而抽象类只允许单继承。
(二)实质性区别:
1.接口是对类的行为的约束,约定了一个类应当拥有哪些行为(方法)。它只关心行为的有无,而不关心行为具体的实现;
抽象类则是对公共本质的提取,是对本质和共同特性的抽象,其设计目的是代码的复用。
2.接口表现的是“like a”的关系。比如,定义一个接口“flyable”,其中有一个方法“ fly”。那么bird类可以实现这个方法,因为鸟可以飞;aircraft类也可以实现这个方法,因为飞行器也可以飞,但是这两个类的本质是截然不同的。一个事物可以与多种其他事物相似,所以接口支持多实现;
而抽象类表现的是“is a”的关系。比如,bird, cat, dog类都可以继承自animal类,因为他们的本质都是动物,都有很多动物的共性。比方说这个类有个方法breathe, 那么这些类都可以直接复用这个方法的代码。因为一个事物的本质只能有一个,所以抽象类只允许单继承。
3.综上所述,当你关注事物的本质的时候,使用抽象类;当你关注操作和行为的时候,使用接口;
4.抽象类的功能要远超过接口,但是定义抽象类的代价很高,因为只允许单继承,所以抽象类必须编写出子类所有的共性;而接口相比较而言更为灵活,在设计阶段可以降低难度







网友评论