C#抽象类和接口的区别分析
来源:互联网 发布:ubuntu如何安装输入法 编辑:程序博客网 时间:2024/06/07 05:44
很多C#的初学者在编程时都容易把抽象类和接口搞混,本文就为大家从概念上讲解抽象类和接口的区别:
一、抽象类:
含有abstract修饰符的class即为抽象类,抽象类是特殊的类,只是不能被实例化,可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖。
二、接口:
接口是引用类型的,类似于类,和抽象类的相似之处有三点:
1、不能实例化;
2、包含未实现的方法声明;
3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);
接口有如下特性:
接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。
两者的语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
8.接口可以用于支持回调,而继承并不具备这个特点. 9.抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的.
抽象类和接口的使用:
1.如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件版本。
2.如果创建的功能将在大范围的全异对象间使用,则使用接口。如果要设计小而简练的功能块,则使用接口。
3.如果要设计大的功能单元,则使用抽象类.如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。
4.抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。
5.好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。
- C#抽象类和接口的区别分析
- c#接口和抽象类的区别
- C#抽象类和接口的区别
- c#接口和抽象类的区别
- c#接口和抽象类的区别
- c#接口和抽象类的区别
- c#接口和抽象类的区别
- C#抽象类和接口的区别
- C#抽象类和接口的区别
- c#接口和抽象类的区别
- c#接口和抽象类的区别
- c#接口和抽象类的区别
- c#接口和抽象类的区别
- C#抽象类和接口的区别
- c#接口和抽象类的区别
- C#接口和抽象类的区别
- c#接口和抽象类的区别
- c#接口和抽象类的区别
- TFS入门使用教程--新建团队项目
- 使用l临界区来实现单例模式
- c++在linux下读取文件遇到的问题
- yaffs2移植到内核linux-4.4.16的修改记录
- 并查集 POJ 1703
- C#抽象类和接口的区别分析
- 【Linux学习】epoll详解
- oracle 查找4000字节以下的记录
- URL参数中&和+被转成空格
- Django 分页
- github使用总结
- java中的static(包括类前面修饰的static、方法前面修饰的static、成员变量前面修饰的static)
- Cocos Creator 常用节点和组件接口(摘自官方文档)
- 设计人生2016网页创意设计大赛成功举办