接口和抽象类的区别
一.接口和抽象类的概念:
1.接口抽象类不同点:
接口:包含了一组虚方法的抽象类型
接口的特点:
- 接口中只包括虚方法的定义,只有声明定义,没有函数实现 (抽象类可以有实现)
- 接口类中可以包括属性、事件、索引器等,但不能包括字段 (抽象类可以有字段)
- 接口类属于多继承 (抽象类单继承,符合类的特点)
- 接口可以支持回调 (抽象类不支持回调)
- 继承了接口的类必须全部实现接口的方法
抽象类:提供了一组派生类访问共享基类的公共方法
抽象类的特点:
- 抽象类不能被实例化,也不能被密封
- 抽象类中的方法,在派生类中要有实现,没有实现的话,这个类就得是抽象类,在由这个类的派生类实现,方法得标记为抽象方法!
- 派生类中实现 基类的抽象方法,必须使用override 修饰符
2.接口抽象类相同之处:
- 不能实例化,由派生类来实现
- 都需要子类实现父类的方法
主要的一些差别:
接口介绍:
简单来说:接口就是一个实现方法的名称,具体的实现还是在于实现这个接口的类!
举个例子来说吧:
小动物们元宵喜乐会,大家show各自的才艺的时候到了。
本命年的孙悟空孙大圣,他带来的节目是《大圣归来2——看我72变》;
特地从任意门赶来的小叮当,带来的节目是《口袋魔术》;
没有睡懒觉,从高老庄坐高铁早早来到的猪八戒,带来的节目是《猪猪侠的36计》。
这些拥有魔法可以变东西,技高一筹的动物们,掌握的可不止是普通动物“叫声”的技能了,普通动物是没有办法具备他们三只的特异功能的,也只有它们三只拥有变东西的方法,这些特定的方法封装成为一个集合,就是我们要了解的接口(interface)了。
这些技高一筹的动物虽然变出的东西不同,但是他们有一个共同的变出东西的方法,把变出东西的名称提取出来就是接口了!
特点:
- 接口中的所有方法必须是抽象的;
- 不能指定访问修饰符;
- 接口中不能包含字段;
- 可以实现多个接口!
抽象类介绍:
抽象类就是对事物的一种抽象:
举个例子:
动物就是一个抽象类:动物共同特点:“叫声”
猫属于动物,就可以发出叫声!
狗也属于动物也可以发出叫声!
问题:我们知道动物是可以发出叫声的,具体让动物叫,动物应该发出什么叫声呢?动物众多小动物的总称,是个抽象的东西。所以抽象类都有个具体的实现类!让一个动物叫,如果这个动物是猫就发出猫的叫声,如果这个动物是狗,就发出狗的叫声!
因为类是单继承,所以创建动物对象时,这个动物只能是一个动物,要么是猫,要么是狗!
所以让动物发出叫声,是猫实现的这个抽象类,就发出猫的叫声,是狗实现的这个抽象类就发出狗的叫声!
特点:
- 抽象类中可以有方法的实现,
- 可以有访问修饰符
- 只能单继承
下面通过实际的例子进行分析:
抽象类:
接口: