一.接口基本概念

(1)接口:是把公共方法和属性组合起来,以封装特定功能的一个集合。创建接口时,一般一大写的I开头,接口中的成员都是公有的。

接口定义如下:

 interface IClown  //写一个接口和写一个类类似,只是不用写具体方法实现
{
string FunnyThingHave { get; }

//只需要定义方法的返回值和参数,然后不用写用大括号括起来的语句,只写一个分号就可以了
void Honk(string name);
}

①利用接口,可以定义一个类必须有的一组方法(实现接口的类必须包含接口中定义的所有方法和属性)

           ②接口不能实例化(ITest test=new ITest() 是错误的),但是可以创建他的引用(如 ITest test是可以);

            接口不存储数据,所以不能增加任何字段,不过可以增加属性,因为get 和set 访问器是一种特殊类型的方法,接口就是要求类去实现包含有特殊名字、类型和参数的方法。(所以遇到在接口中增加字段就能解决的问题,可以使用属性来达到目的。

           ④接口并不是用来避免重复的代码的,它的作用是使得一个类可以做不止一种工作而无需继承,因为继承会带来很多额外的负担:你必须继承每一个方法、属性和字段,而不只是处理特定任务有关的那些成员

           ⑤可以用is 关键字来检查一个类是否实现了某个接口

           ⑥某个类可以实现多个接口但只能派生(继承)于一个基类,用冒号操作符实现接口,冒号后首先是基类,后面是一组接口(除非这个类没有继承任何类,在这种情况下,冒号后面只有一组接口,各个接口没有特定的顺序)

二.抽象类基本概念

    • 用 abstract 关键字修饰的类叫抽象类,用 abstarct 修饰的方法叫抽象方法。
    • 抽象类可以定义属性
    • 可以有抽象方法(抽象方法必须在抽象类中)------抽象方法只有方法声明,没有方法体,继承该抽象类(接口)的非抽象自雷必须实现该抽象方法
    • 可以有非抽象方法
    • 抽象类可以定义构造器,但本身不能实例化,只能实例化该抽象类的实现类

抽象类中怎么确定方法是需要用虚方法还是抽象方法?

    • 当不需要用父类中的实现时,将其定义为抽象方法(实现类自行写自己的实现过程)
    • 当实现的方法多数都一样,少数不一样时,将方法以虚拟方法形式写在父类,在少数不一样的过程中重写方法

三.接口和抽象类比较

相同点:

    • 都可以被继承
    • 都不能实例化

不同点

    • 抽象类是一个不完整的类,需要进一步细化;而接口只是一个行为上的规范。
    • 抽像基类不能实现多继承,而接口可以实现多继承。
    • 抽象基类可以实现定义字段、属性、包含有实现的方法。接口可以定义属性、方法但不能包含方法的实现

 四.何时使用接口?何时使用抽象类?

  • 如下情况时使用接口

①个性大于共性

②差异较大的个性间具有某些相同的行为

③相同行为的实现方式有较大差别

  • 如下情况时使用抽象类

①共性大于个性

②共性相同的个体间必然有相同的属性与行为

③相同行为的实现方式有一定区别

1.当在差异较大的对象间寻求功能上的共性时,使用接口。

2.当在共性较多的对象间寻求功能上的差异时,使用抽象基类

参考资料:(33条消息) 抽象基类与接口,共性与个性的选择!_weixin_34008933的博客-CSDN博客

抽象类、父类、接口_**Dragon**的博客-CSDN博客

最新文章

  1. 基于jquery的图片轮播 (IE8以上)
  2. Hadoop第6周练习—在Eclipse中安装Hadoop插件及测试(Linux操作系统)
  3. LBS地理位置距离计算方法之geohash算法
  4. Plan-9效应:为什么东西不坏就不要去修它
  5. 关于JavaScript 原型的理解
  6. 老李分享:接电话扩展之uiautomator 1
  7. css实现未知高度水平垂直居中
  8. java安全入门篇之接口验签
  9. Oracle 10046
  10. nginx+python+windows 开始
  11. ceph S3测试--cosbench
  12. Linux shell中处理
  13. iOS循环引用常见场景和解决办法
  14. Xcode真机调试iOS10中Nslog 打印不出东西
  15. Sqli-LABS通关笔录-8[延时注入]
  16. 常用linq语法
  17. 08-可滚动Widget
  18. [COGS2427][HZOI 2016]seq
  19. CF1042A 【Benches】(优先队列)
  20. Python学习笔记 - PostgreSQL的使用

热门文章

  1. 新建zabbix数据库
  2. 大规模并行处理器编程实战_原书第2版_pdf
  3. 镜像问题、简易安装,系统语言更改,中文输入,提高下载速度,Firefox的语言更改,Firefox上网速度慢
  4. 【Python】语言的控制流程
  5. cuda 11.8
  6. DCU-GPU
  7. SATA硬盘的数据和电源接口定义(转)
  8. rust crm 镜像源管理
  9. 删除File Explorer、This PC、Folders
  10. asp.net mvc api swagger 配置