类,抽象基类,接口类三者间的区别与联系(C++)
联系很明显,三个都是‘类’,如果读者对类的概念不清楚,可以参照wid的博文http://www.cnblogs.com/mr-wid/archive/2013/02/18/2916309.html。
下面着重解释一下区别,但此文仅是个人理解,如果觉得我说的不对的地方,还请赐教。
(1)结构上的区别:
普通类:数据+方法+实现
抽象类:数据+方法(一定包含虚方法n>=1)+部分方法的实现
接口类:方法(纯虚方法)
(2)概念上的区别:
普通的类和另外两个的区别很明显,普通类就是猫狗之类的,而抽象类就是动物类。但接口类与抽象类的区别不太明显,下面就说说这两个类。
接口类算是从抽象类中分离出来的特殊的抽象类(纯虚方法且不含数据的抽象类),抽象类侧重点在‘类’的角度上,而接口类则侧重于‘方法’。引用《大话设计模式》中的一句话就是,“类是对对象的抽象,抽象类是对类的抽象,而接口是对行为的抽象。”
举个例子,猫、狗类(普通的具体类)继承于动物类(抽象类),而猫、狗类又有共同的‘吃饭’的行为,这时,我们就可以写一个‘吃饭’的接口类,让猫、狗类继承并实现这个方法。
抽象类是从子类中发现公共的东西泛化出父类,从而让子类继承父类,但是你写接口类的时候不一定知道子类的存在,但就如‘吃饭’一样,肯定都是要的,只是具体的子类如何实现就要看子类是啥了,猫吃鱼、狗啃骨头,具体‘吃饭’的方法在子类中实现。
看《大话设计模式》时总结出来的,如果还不理解,可以直接去看那本书附录A。