面试问题 - C# 接口和抽象类的区别
这个问题基本上可以说是 面试时的必问问题
C# 中的接口和抽象类
相同点:
1. 都不能直接实例化,都可以通过继承实现其抽象方法
2. 都是面向抽象编程的技术基础,实现了诸多的设计模式
不同点:
1. 接口支持多继承 (类可以继承任意多个接口),抽象类不能实现多继承 (一个类最多只能继承一个抽象类) (C#中不支持多继承)
2. 接口只能定义抽象规则; 抽象类既可以定义规则,还可以提供已经实现了的成员
3. 接口是一组行为规范;抽象类是一个不完全的类,着重族的概念
4. 接口可以用于支持回调;抽象类不能实现回调,因为继承不支持
5. 接口只能包含方法,属性,索引器,事件的签名四种成员类型, 但是不能定义字段,不能包含已经实现的方法; 抽象类可以定义属性,也可以定义字段,包含已经实现了的方法
抽象类中可以包含 字段,构造函数, 析构函数,静态成员,常量. 接口不可以
6. 接口可以作用于值类型和引用类型; 抽象类只能作用于引用类型。 比如 Struct就可以继承接口,但是不能继承类
7. 接口中的成员必须是公有的, 接口中包含的成员不带访问修饰符,所有接口成员都隐式规定为public的.
抽象类和子类是 "is-a"关系,而接口是不同类间共有的状态或行为的规范
一个类继承了某个抽象类,表示它 "是什么"
实现了某个接口表示它“有什么功能”或者“会做什么事”
eg: 燕子(具体类)是鸟(抽象类), 会飞(接口)。 C#中不支持多继承,即 燕子 只能是鸟,不会是其他东西了; 但它可以有多个功能,做很多事情,比如会飞( 接口 IFly), 会吃( 接口IEat)
8. 一个类或结构实现接口的原则是: 要么全要要么全不要。即所有在接口中定义的成员都必须在实现它的类或结构中实现.
9. 好的接口定义应该是具有专一功能的,而不是多功能的,否则造成接口污染.
如果一个类只是实现了这个接口中的一个功能,而不得不去实现接口中的其他方法,这就叫做接口污染 (因为一个类实现接口,必须实现它的所有方法)
10. 如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中的方法
11. 对抽象类不能使用new关键字,也不能被密封. 如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类, 另外,实现抽象方法由override关键字来实现。
12. 当一个类继承某个接口时,它不仅要实现该接口定义的所有方法,还要实现该接口从其他接口中继承的所有方法
13. 接口多定义对象的行为,着重于CAN-DO关系类型;抽象类多定义对象的属性,偏重于IS-A式的关系。
面试问题 - C# 接口和抽象类的区别的更多相关文章
- 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 ...
- java中的接口和抽象类的区别
1.接口从用户的角度(使用实现的代码)看问题. 2.接口由编译器强制的一个模块间协作的合约. 3.无成员变量. 4.成员函数只能声明不能实现,(jdk1.8中的default 方法可以有方法体). 接 ...
- 《Java基础知识》Java接口和抽象类的区别
抽象类 抽象类必须用 abstract 修饰,子类必须实现抽象类中的抽象方法,如果有未实现的,那么子类也必须用 abstract 修饰.抽象类默认的权限修饰符为 public,可以定义为 public ...
- Java中接口和抽象类的区别?
抽象类 抽象类必须用 abstract 修饰,子类必须实现抽象类中的抽象方法,如果有未实现的,那么子类也必须用 abstract 修饰.抽象类默认的权限修饰符为 public,可以定义为 public ...
随机推荐
- 【BZOJ3091】城市旅行 LCT
[BZOJ3091]城市旅行 Description Input Output Sample Input 4 5 1 3 2 5 1 2 1 3 2 4 4 2 4 1 2 4 2 3 4 3 1 4 ...
- 【oracle案例】ORA-01102: cannot mount database in EXCLUSIVE mode
ORA-01102: cannot mount database in EXCLUSIVE mode 今天在fedora上安装完10g后,测试数据库是否安装成功.STARTUP数据库时,发生如下错误: ...
- sql server charindex函数和patindex函数详解(转)
charindex和patindex函数常常用来在一段字符中搜索字符或字符串.假如被搜索的字符中包含有要搜索的字符,那么这两个函数返回一个非零的整数,这个整数是要搜索的字符在被搜索的字符中的开始位数. ...
- 九度OJ 1080:进制转换 (进制转换)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4583 解决:1076 题目描述: 将M进制的数X转换为N进制的数输出. 输入: 输入的第一行包括两个整数:M和N(2<=M,N< ...
- java参数的值传递和引用传递
今天抽了点时间继续啃java核心基础,即使出来做web挺长时间了,始终觉得基础极其重要. 遇到了java参数的传递类型,豁然开朗之时不忘写下记录. java中采用的总是值传递,包括对对象参数的传递,采 ...
- Grunt学习笔记【3】---- filter使用方式和实现原理详解
本文主要讲配置任务中的filter,包括使用默认fs.Stats方法名和自定义过滤函数,以及filter的实现原理. 通过设置filter属性可以实现一些特殊处理逻辑.例如:要清理某个文件夹下的所有空 ...
- HDU 1032 The 3n + 1 problem (这个题必须写博客)
The 3n + 1 problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- CodeForces - 540B School Marks —— 贪心
题目链接:https://vjudge.net/contest/226823#problem/B Little Vova studies programming in an elite school. ...
- 51nod 1610
题目 神犇题解 所以说鄙人的姿势水平完全不够啊OTZ. 很naive的想法是O(T*v*m)的,据说卡一卡可以过去.题目要求的东西其实是这个: $ \sum\limits_{i = 1}^v {\mu ...
- 创建Django博客的数据库模型
声明:此Django分类下的教程是追梦人物所有,地址http://www.jianshu.com/u/f0c09f959299,本人写在此只是为了巩固复习使用 blog最主要的功能就是展示我们写的文章 ...