第6篇 接口

接口是C#的一种引用数据类型。接口像是一个抽象类,可以定义方法成员,属性,索引器和事件等,但是接口不提供对成员的实现,继承接口的类必须提供接口成员的实现。

        类用于描述的是事物的共性基本功能,接口用于定义的都是事物的额外功能。

接口的好处

        规范性:定义接口像是在定义一种规范,当一个项目庞大复杂的时候,用接口去定义业务规范,这些接口可以用来告诉开发人员需要实现哪些具体的业务功能,并且连命名也被定义好了(可以防止开发人员任意取名)。

        多继承多继承的好处是可以让子类具备更多的功能,但是多继承的弊端是调用的不确定性。当A类和B类都有相同的Method()方法时候,C类如果同时继承A类和B类,此时C类的实例化对象在调用Method()方法时就会调用不确定。所以C#不直接支持多继承,而是通过接口来解决问题,将多继承转换成了多实现。

        解耦和扩展:接口不需要管每个功能的具体实现,实现由派生类去做。面向接口的编程将接口与实现分离,实现了接口的类便具备了接口定义的功能,提高了软件的扩展性。

        多态性:多态是指父类的引用类型变量指向了子类的对象或者是接口类型的引用类型变量指向了接口实现类的对象。实现面向接口编程下的多态:接口  变量  = new  接口实现类的对象。

接口的定义与实现

         声明接口使用interface关键字,接口成员可以是属性,方法,索引器和事件,不能包含字段和构造函数等。所有的接口都隐式地具有public访问修饰符。

C#中实现接口与继承基类的形式一样,直接在实现类后面跟上冒号和接口即可(java语言则是用implements关键字)。

接口的特点

  1. 接口不可以实例化,接口是用来被实现的。
  2. 需要覆盖了接口中所有的成员的子类,才可以实例化。
  3. 一个类继承另一个类同时,还可以实现多个接口。

关于接口的继承与实现的关系

类与类之间是继承关系,只能单继承;类与接口之间是实现关系,而且可以多实现;接口与接口之间是继承关系,而且接口之间是多继承。

因此我们讲C#不直接支持多继承,但并不是讲C#没有多继承,因为接口就是可以多继承。

接口的问题。

当我们某个实现类只需要接口中的部分功能,但是为了实例化,必须要全部覆盖,这使得代码的复用性很差,怎么办?

为了方便创建接口的子类对象,可以用一个类先把接口中的所有方法都实现(空实现),该类创建对象没有意义,并且它必须要被继承,因为接口需方法要实现,所以将该类抽象。这就是传说中的没有抽象方法的抽象类。如此以来,可以用子类去继承抽象类,在覆盖掉自己需要实现的方法即可。

抽象类与接口的区别

  1. C#支持单继承,不直接支持多继承。它们的派生类只能继承一个抽象类,但是可以实现多个接口。即单继承,多实现。
  2. 抽象类中可以包含字段,构造函数,析构函数,静态成员或者常量等,但是接口中不可以。
  3. 抽象类中可以定义非抽象成员的实现,但是接口中不能定义任何实现。
  4. 抽象类中的成员可以私有的(只要是不抽象的),受保护的,内部的或者受保护的内部成员,但是接口中的成员必须是公共的。

 备注:关于多态的内容请看“第7篇 多态”

时间: 2024-10-13 04:41:46

第6篇 接口的相关文章

JAVA基础篇—接口实现动态创建对象

Scanner在控制台输入内容 package com.Fruit; public interface Fruit {//提供接口 } package com.Fruit; public class Apple implements Fruit{ public Apple(){ System.out.println("创建了一个苹果"); }} public class Oranges implements Fruit{ public Oranges(){ System.out.pri

如何优雅的使用接口

嗯,6.1刚过完,我们不在是宝宝了,来吧,撸一篇接口的文章(interface). 在编程的过程中我们应该学会如何使用接口来给变我们的生活,极大的提升自我能力.接口不是新特性,但是非常重要,下面我们来撸个接口的小例子. 虚构一个DocumentStore的类,这个类负责从不同的资源收集文本.可以从远程url读取html,也可以读取资源,也可以收集终端命令输出. 定义DocumentStore类 class DocumentStore{ protected $data = []; public f

如何正确规范写接口文档

前言 正规的团队合作或者是项目对接,接口文档是非常重要的,一般接口文档都是通过开发人员写的.一个工整的文档显得是非重要.下面我将我看到的一篇接口文档做一个总结 开始吧!!! 接口1: 查询排重接口 接口详情   地址 http://www.baidu.com (正式环境) 请求方式 GET 参数 是否必填 说明 idfa 是 广告标识符,只支持单个查询 source 是 渠道来源,具体值在接入时再进行分配 返回结果 格式 JSON 状态码 10000 success(调用成功)   10001

从零开始学架构:开篇-文章大纲

为什么写这个系列文章? 1)行业趋势:15年说过,随着互联网架构的普及,软件复杂度的提升,架构师职位会在未来五年,迅速发展.谁掌握了架构,谁就掌握了软件技术的核心. 2)15年承诺:起源于大型网站架构,计划写完大型网站架构系列,开始<一步一步学架构系列>(目前改名为:从零开始学架构系列) 3)个人感悟:1.做技术就是做架构:2.做工作就是做管理:这两句不详细解释,大家慢慢品味. 基于以上几点,因此开始写<从零开始学架构系列>,本系列的主要目标人群是开发人员,高级开发人员,初级架构师

深入研究JavaScript的事件机制

本篇开始将回顾下Javascript的事件机制.同时会从一个最小的函数开始写到最后一个具有完整功能的,强大的事件模块.为叙述方便将响应函数/回调函数/事件Listener/事件handler都称为事件handler.天台县羿壮冶金 先看看页面中添加事件的几种方式: 直接将JS代码写在HTML上 测试:Nowamagic view source print? 1 <div onclick="alert('欢迎访问Nowamagic.net');">Nowamagic</

Java:Object类详解

Java的一些特性会让初学者感到困惑,但在有经验的开发者眼中,却是合情合理的.例如,新手可能不会理解Object类.这篇文章分成三个部分讲跟Object类及其方法有关的问题. 上帝类 问:什么是Object类? 答:Object类存储在java.lang包中,是所有java类(Object类除外)的终极父类.当然,数组也继承了Object类.然而,接口是不继承Object类的,原因在这里指出:Section 9.6.3.4 of the Java Language Specification:"

【转】C#笔记之委托(Delegate)(一)

原文: 小贱学C#笔记之委托(Delegate)(一) 本来因为之前接口那篇文章很多坛友给提了一些意见,花了一上午事件码了篇接口和抽象类比较和理解,谁知道...谁知道...不就打错了验证码么,木有了全都木有了?!恢复的只有一个标题好伤心~要再来一遍,今天是真没那个心情了,收拾收拾我这受伤的心灵,换个话题,抽象类就等下一回吧!好了,开始! 首先我们先理解下委托到底有什么用.我的理解呢就是,我找个人帮我干活,嘿嘿~不理解?等我给你个情景,一个是我家里没请保姆,一个是我请了个保姆. [code]csh

Go语言基础之反射

本文介绍了Go语言反射的意义和基本使用. 变量的内在机制 Go语言中的变量是分为两部分的: 类型信息:预先定义好的元信息. 值信息:程序运行过程中可动态变化的. 反射介绍 反射是指在程序运行期对程序本身进行访问和修改的能力.程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分.在运行程序时,程序无法获取自身的信息. 支持反射的语言可以在程序编译期将变量的反射信息,如字段名称.类型信息.结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的

诗经 全文

诗经 全文 (带注释和译文) http://www.edu009.com/Article/HTML/Article_60756.html <诗经> 春秋·孔丘 <诗经>是我国第一部诗歌总集,先秦时代称为“诗”或“诗三百”,孔子加以了整理.汉武帝采纳董仲舒“罢黜百家,独尊儒术”的建议,尊“诗”为经典,定名为<诗经>. <诗经>现存诗歌 305 篇,包括西周初年到春秋中叶共 500 余年的民歌和朝庙乐章,分为风.雅.颂三章. “风”包括周南.召南.邶.鄘.卫.王