详解接口和抽象类的区别

一:首先要明白什么是抽象类和接口:

抽象类:抽象类是特殊的类,只是不能被实例化(将定义了一个或多个纯虚函数的类称为抽象类);除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的,但同时也能包括普通的方法。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。虽然不能定义抽象类的实例,但是可以定义它的指针,并且指向抽象类的指针实际上在赋值时是指向其继承类的实例化对象的,这样通过统一的使用该指针可以很好的封装不同子类的实现过程,这在模式设计的过程中得到了极大的应用!

接口:接口是一个概念。它在C++中用抽象类来实现。个人理解,其实接口就是抽象类中定义的虚函数,通过子类的继承,对基类虚函数进行重写,在运行的时候,通过基类的指针动态的调用相应子类的实现方法,从而真正意义上实现了多态。

二:抽象类和接口的区别:

(1):首先接口和抽象类的设计目的就是不一样的。接口是对动作的抽象,而抽象类是对根源的抽象。对于抽象类,比如男人,女人这两个类,那我们可以为这两个类设计一个更高级别的抽象类--人。对于接口,我们可以坐着吃饭,可以站着吃饭,可以用筷子吃饭,可以用叉子吃饭,甚至可以学三哥一样用手抓着吃饭,那么可以把这些吃饭的动作抽象成一个接口--吃饭。

(2):抽象类主要是用来抽象类别,接口主要是用来抽象方法功能。当你关注事物的本质的时候,请用抽象类;当你关注一种操作的时候,用接口。

(3):接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。

三:抽象类和接口的相同点:

  1. 都可以定义抽象方法
  2. 都不可以实例化对象
  3. 抽象方法都要在子类中重写(实现),如果不全部重写,则子类也要定义为抽象类

猜你喜欢

转载自blog.csdn.net/leikun153/article/details/81587358