C#—接口和抽象类的区别?
一、接口
接口是指对协定进行定义的引用类型,其他类型实现接口,以保证它们支持某些操作。接口指定必须由类提供的成员或实现它的其他接口。与类相似,接口可以包含方法、属性、索引器和事件作为成员。
1、接口存在的意义是为了实现多态;
2、接口中只能包含方法(属性、事件、索引);
3、接口的成员不能有任何实现;
4、接口不能被实例化;静态类、抽象类也不可以被实例化
5、接口的成员不能有访问修饰符(默认为public);
6、实现接口的子类必须将接口的所有成员函数实现;
7、子类实现接口的方法时,不需要任何关键字,直接实现即可。(抽象类、虚方法需要加override)
二、抽象类
抽象类,在面向对象过程中,所有的对象都是类描绘的,反过来,类里面的数据不足以把具体的对象描绘出来,这样的类就是抽象类
1、抽象方法只能出现在抽象类中,但是抽象类中可以包含普通方法。
2、在父类中定义的抽象方法不能实现。
3、抽象类不能实例化(也就是不能new出来)。
4、抽象类与抽象方法需要添加abstract关键字。
5、子类实现父类的抽象方法时,需要添加override关键字。
6、如果抽象类的子类不是抽象类,那么子类中必须重写父类抽象类的所有抽象方法。
三、抽象类和接口的区别
相同点
1.不能实例化;
2.包含未实现的方法声明
3.派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员)
不同点
1.接口可以多继承,抽象类不能实现多继承。
2.接口只能定义抽象规则,抽象类既能定义抽象规则也能提供已实现的成员
3.接口是一组行为规范,抽象类是一个不完全的类,着重于族的概念
4.接口支持回调,抽象类不能实现回调,因为继承不支持。
5.接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法,抽象类可以定义属性、字段、包含有实现的方法
6.接口可以作用于值类型和引用类型,抽象类只能作用于引用类型(例如:Struct只能继承接口)
7.抽象类应主要用于关系密切的对象,而接口则是适合为不相关的类提供通用功能
8.接口着重于Can—Do关系类型,抽象类则偏重于IS—A式关系。
9.接口多定义对象的行为,抽象类多定义对象的属性。
10.如果要设计小而简练的功能块,则使用接口,如果要设计大的功能单元,则使用抽象类
11.接口对应是面向对象编程思想的重要原则:面向接口编程,
C#—接口和抽象类的区别?的更多相关文章
- android中接口和抽象类的区别
最近发现很多基础有点生疏了,特地写一点博客来巩固一下.今天主要来谈谈接口和抽象类的区别,我们在项目的很多地方都会用到接口或者抽象类,但是它们之间的一些区别和相同点不知道大家有没有注意到,还有就是,什么 ...
- Java接口和抽象类的区别
今天看到项目中,写了一个抽象类,里面有很多方法继承了这类,当调用这个接口时,采用的是这个抽象类去调方法的,当时一想,这个不就是我们说的Java的多态的特征: 继承:存在继承关系的子类和父类 重写:子类 ...
- java 接口和抽象类的区别
java 接口和抽象类的区别抽象类:1.含有抽象方法的类一定为抽象类,反过来抽象类,不一定含有抽象方法:2.抽象类必须用abstract来进行定义,抽象方法也必须用abstract来进行定义:3.抽象 ...
- java接口和抽象类的区别和作用(功能、用途、好处)
Java接口: 总结了4点关于JAVA中接口存在的意义: 1.重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋 ...
- 【Java知识点专项练习】之 接口和抽象类的区别
接口和抽象类的区别 接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的.接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为publi ...
- C#中接口与抽象类的区别
接口与抽象类是面试中经常会考到的点,容易混淆.首先了解下两者的概念: 一.抽象类: 抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类 ...
- java中的接口和抽象类的区别
1.接口从用户的角度(使用实现的代码)看问题. 2.接口由编译器强制的一个模块间协作的合约. 3.无成员变量. 4.成员函数只能声明不能实现,(jdk1.8中的default 方法可以有方法体). 接 ...
- 《Java基础知识》Java接口和抽象类的区别
抽象类 抽象类必须用 abstract 修饰,子类必须实现抽象类中的抽象方法,如果有未实现的,那么子类也必须用 abstract 修饰.抽象类默认的权限修饰符为 public,可以定义为 public ...
- Java中接口和抽象类的区别?
抽象类 抽象类必须用 abstract 修饰,子类必须实现抽象类中的抽象方法,如果有未实现的,那么子类也必须用 abstract 修饰.抽象类默认的权限修饰符为 public,可以定义为 public ...
- C# 接口与抽象类的区别? 情景下使用接口,什么情景下使用抽象类?
接口与抽象类的区别: 接口支持多继承:抽象类不能实现多继承. 接口可以用于支持回调:抽象类不能实现回调,因为继承不支持. 接口只包含方法.属性.索引器.事件的签名,但不能定义字段和包含实现的方法:抽象 ...
随机推荐
- [bzoj3450]Tyvj1952 Easy[概率dp]
和之前一样考虑这个音符时x还是o,如果是x,是否是新的连续一段,对答案的贡献是多少$(a^2-{(a-1)}^2)$,然后递推就可以了. #include <bits/stdc++.h> ...
- hdu_1031_Design T-Shirt_201310291647
Design T-Shirt Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- [luogu1373]小a和uim之大逃离_动态规划
小a和uim之大逃离 题目大意:有一个n*m的矩阵.每个格子上有一坨0~k不等量的权值.有两个人,每个人任选一个格子作为出发点,并只能向下或向右走.求最后两个人所得到的权值mod k相等的方案数. 注 ...
- MYSQL 运维
http://www.eimhe.com/thread-142990-1-1.html http://www.eimhe.com/search.php?mod=forum&searchid=6 ...
- Linux下安装lvs
lvs已经编译到linux内核中,仅仅须要安装lvs的管理软件ipvsadm就可以 1. 插入光盘.查找设备 [root@chen ~]# ls -l /dev | grep cdrom lrwxrw ...
- [RxJS 6] The Catch and Rethrow RxJs Error Handling Strategy and the finalize Operator
Sometime we want to set a default or fallback value when network request failed. http$ .pipe( map(re ...
- java常见的面试题
1. super()与this()的差别? super和this的差别: 1)super(參数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句) 2)this(參数):调用本类中还有一种形 ...
- 《Google 软件测试之道》摘录
最近刚刚看完<Google 软件测试之道>,受益颇多,遂记录下: 只有在软件产品变得重要的时候质量才显得重要 第一章:谷歌软件测试介绍 角色介绍 SWE(Software Engineer ...
- js中DOMContentLoaded和load的区别
如题:DOMContentLoaded和load都是页面加载的时候触发的事件.区别在于触发的时机不一样. 浏览器渲染页面DOM文档加载的步骤: 1.解析HTML结构. 2.加载外部脚本和css文件. ...
- 64位BASM学习随笔(一)
64位BASM学习随笔(一) Delphi的BASM一直是我最喜爱的内嵌汇编语言,同C/C++的内联汇编相比,它更方便,更具灵活性,由于C/C++的内联汇编仅仅能是或插入式的汇编代码,函数花括号 ...