在C#中,接口和类的实现和继承的外在形式没有太大的差别,都是一个冒号“:”来解决的,如下图
这是类实现接口的写法:
这是类继承类的写法:
两者之间没有什么明显的区别,唯一辨别出冒号“:”后边的是类还是接口只能靠Visual Studio的编辑器,如果改到文本模式,那就更不能从颜色上去区分了。
首先我们来说一下接口是什么:
接口(英文:Interface),在编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface声明。一个类通过实现接口的方式,从而来继承接口的抽象方法。
但是接口并不是类,两者的编写方式虽然很类似,但是它们属于不同的概念。类描述对象的属性和方法;接口则包含类要实现的方法。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法;但是也有例外的现象,例如抽象类。
抽象类不实现接口中所有方法的一种解释(来自百度知道的回答)
抽象类实现接bai口可以不实现其中的所有方法:其实接口就是一个抽象类zhuan的另一种体现形式。
如果一个抽象类实现了抽象接口,那么本身这个抽象类就是抽象的,意味着就算实现了,子类再extends抽象类的话就没必要实现了。
举个例子:
小明、小花,他们是好朋友,他们各自有秘密,如果小明把秘密告诉了小花,那么小花也不一定必须把小花的秘密告诉小明吧。
PS:抽象类本身是没用的,提供给子类来使用,如果抽象类实现接口然后重写抽象类方法,岂不是失去了抽象的概念!
那么类又是什么呢:
类 (class) 是最基础的 C# 类型。类是一个数据结构,将状态(字段)和操作(方法和其他函数成员)组合在一个单元中。类为动态创建的类实例 (instance) 提供了定义,实例也称为对象 (object)。类支持继承 (inheritance) 和多态性 (polymorphism),这是派生类 (derived class) 可用来扩展和专用化基类 (base class) 的机制。
那么,类和接口之间,除了在外观上的区别之外,它们之间的内在区别又有哪些内容呢?
一、表示内容不同
1、抽象类:抽象类表示该类中可能已经有一些方法的具体定义。
2、接口:接口就仅仅只能定义各个方法的界面(方法名,参数列表,返回类型),并不关心具体细节。
二、性质不同
1、抽象类:抽象类是对象的抽象。
2、接口:接口是一种行为规范。
三、成员变量不同
1、抽象类:抽象类中的成员变量可以被不同的修饰符来修饰。
2、接口:接口中的成员变量默认的都是静态常量(static final)。