定义
抽象类
如果类中有些函数成员只有名称,而没有函数的实现体,这种类称为“抽象类”,通过抽象类实现多态性,与集成多态性本质上是相同的。
接口
在软件世界中,我定义一个三相电源接口IPower,其实是真实电源接口的一个“设计蓝图”
计算机类实现了电源接口,但是我们不能说,计算机就是“电源”
若我们再定义一个“智能设备”抽象类,计算机类继承了它,我们可以说,计算机就是“智能设备”。这正是抽象类和接口的本质区别:抽象类与它的子类具有“是一种”关系,是父与子的“家族”关系;而实现了“某某接口”的类表明该类有“某某”功能。
相同点
1、他们都不能实例化
2、他们都包含未实现的方法声明
3、他们的派生类必须实现未实现的方法
4、他们把不可变的与可变的分离开来;不可变的是方法的签名,可变的是方法的实现体——留给他们的派生类去实现
不同点
一个类可以继承多个接口,但只能继承一个类
例子
1、狗类和猫类是动物类派生的,是“是一种”关系。而“叫”接口仅仅是一种功能,虽然狗类实现了它,但他们之间不是“是一种”的关系,因为不能认为狗是一种“叫”
2、铁门、木门都是“门”,你想要一个“门”,我给不了(不能实例化一个抽象类),但我可以给你具体的铁门或木门;而且只能是门(类的单继承)
3、一个门可有锁接口,也可有门铃接口(接口的多继承)
4、“门”(抽象类)定义了你是什么,“锁”(接口)规定了你能做什么
5、一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染)