接口和抽象类的区别
基本区别
- 抽象类可以存在普通成员函数,而接口中只能存在
public abstract方法; - 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是
public static final类型的; - 抽象类只能集成一个,接口可以实现多个。
设计目的
接口:接口的设计目的,是==对类的行为进行约束==,也就是提供了一种机制,可以强制要求不同的类具有相同的行为。它只约束了行为的有无,但不对如何实现行为进行限制。
抽象类:抽象类的设计目的,是==代码复用==。当不同的类具有相同的行为(记录为行为集合A),且其中一部分的行为的实现方式一致时(A的非真子集,记为B),可以让这些类都派生于同一个抽象类。在这个抽象类中实现B,避免让所有的子类来实现B,这就达到了代码复用的目的。而A减B的部分,留给各个子类自己实现。正是因为A减B这部分抽象类没有实现,所以抽象类不允许实例化,否则出现调用【A-B】方法时无法执行。
==个人理解:== 感觉新的版本下,接口也可以实现代码复用的目的,比如说两个接口分别实现==同样的默认方法==methodCom01(),在实现其他接口时,可以调用methodCom01()这个方法,通过继承不同的接口,达到调用不同实现的方式,因为methodCom01()具有通用性,可以进行更多的组合操作。
抽象的对象
抽象类:抽象类是==对类本质的抽象,表达的是 is a 的关系==,比如:BMW is a Car。抽象类包含并实现子类的通用特性,将子类存在差异化的特性进行抽象,交由子类去实现。
接口:接口是对行为的抽象,表达的是 like a 的关系,比如:Bird like a Aircraft(鸟像飞行器一样可以飞),但其本质是个鸟。并且具体怎么飞也不一样。接口的核心是定义行为,即实现类可以做什么,至于实现类主体是谁,是如何实现的,接口并不关心。
使用场景
当你关注一个事物的本质时,用抽象类;
当你关注一个操作时,用接口;
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果