有不少的文章在描述这两者,但好象都没有怎么从初学者的浅显角度来看。
其实这两者有很多相识之处,当然也有很多不同之处。要理解它们,应该先从面向对象思想开始。面向对象思想里面,最基本的就是封装,继承和多态。所谓封装,说的小,方法(函数)也就是对一种操作的封装,说的大,用类来描述一个具体的对象。
那么在面向对象程序中应该说对封装还有一层新的定义,即将类的描述抽象化,也就是说描述类的外貌而不去考虑它的实际。
那么我们回过头来看抽象类,它必须被继承使用,描述的其实是一种继承关系,即"is a"的关系。类继承它,也就是说类拥有它所有抽象方法等,那么也就是类遵循了它所定义的规范。但是呢,这种规范是通过继承而来,类的发展必须依赖它的父类。
我们从这个例子中不难看出,张三和李四同样都遵循抽象工作的规范,都拥有上班这个方法,但是呢,他们的发展始终受到父类的影响。
当然,我这里只是从它们使用的角度来看,我们还能从他们设计角度度来看。上面我们虽然实现了人.上班()的过程,但是,这却违反了面向对象设计中的一个核心原则ISP(Interface Segregation Priciple),我们把李四的作为人的行为和他工作的行为混在一起。
那我们再来看看接口(interface),引用