抽象类和接口

定义

抽象类

    如果类中有些函数成员只有名称,而没有函数的实现体,这种类称为“抽象类”,通过抽象类实现多态性,与集成多态性本质上是相同的。

接口

    在软件世界中,我定义一个三相电源接口IPower,其实是真实电源接口的一个“设计蓝图”

    抽象类和接口_第1张图片

    计算机类实现了电源接口,但是我们不能说,计算机就是“电源”

    若我们再定义一个“智能设备”抽象类,计算机类继承了它,我们可以说,计算机就是“智能设备”。这正是抽象类和接口的本质区别:抽象类与它的子类具有“是一种”关系,是父与子的“家族”关系;而实现了“某某接口”的类表明该类有“某某”功能。

相同点

    1、他们都不能实例化

    2、他们都包含未实现的方法声明

    3、他们的派生类必须实现未实现的方法

    4、他们把不可变的与可变的分离开来;不可变的是方法的签名,可变的是方法的实现体——留给他们的派生类去实现


不同点

    抽象类和接口_第2张图片

    一个类可以继承多个接口,但只能继承一个类


例子 

    1、狗类和猫类是动物类派生的,是“是一种”关系。而“叫”接口仅仅是一种功能,虽然狗类实现了它,但他们之间不是“是一种”的关系,因为不能认为狗是一种“叫”

    2、铁门、木门都是“门”,你想要一个“门”,我给不了(不能实例化一个抽象类),但我可以给你具体的铁门或木门;而且只能是门(类的单继承)

    3、一个门可有锁接口,也可有门铃接口(接口的多继承)

    4、“门”(抽象类)定义了你是什么,“锁”(接口)规定了你能做什么

    5、一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染)



你可能感兴趣的:(抽象类和接口)