1.C# 接口与抽象类

接口

从“面向接口编程”的角度看,接口是一中思想层面上的用以实现多态、提高软件灵活性和可维护行性的架构部件。

从代码的角度来看,接口是由几个没有主体代码的方法定义组成的集合体,有唯一的名称,可以被类或这其他接口继承。

interface interfatceName

{

void Method1();

void Method2(int para1);

void Method3(string para2,string para3);

}

①接口不能被实例化

②接口只能包含方法声明

③接口的成员包括:方法声明、属性、索引器、事件

④接口中不能包含:常量、字段(域)、构造函数、析构函数、静态成员

⑤接口中的所有成员默认为public,因此接口中不能有private修饰符

⑥派生类必须实现接口的所有成员

⑦一个类可以直接实现多个接口,接口之间用逗号隔开

⑧一个接口可以有多个父接口,实现该接口的类必须实现父接口中的所有成员

⑨接口是对动作的抽象

⑩接口表示的是:这个对象能做什么

⑪接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约

⑫接口是引用类型的

抽象类

简单点说,含有abstract修饰符的类为抽象类,抽象类提供多个派生类共享基类的公共定义,能够提供抽象方法和非抽象方法。

抽象类不能被实例化,必须通过继承由派生类实现其抽象方法;

抽象类的派生类可以声明为抽象类,即抽象派生类,抽象派生类可以覆盖基类的方法也可以不覆盖,其非抽象派生类必须覆盖它们。

①抽象类不能被实例化

②抽象类中的抽象方法只作声明,不包含实现,可以看作没有实现的虚方法

③抽象类可以有抽象属性和抽象方法,但不是必须

④非抽象派生类必须覆盖基类的抽象方法

⑤抽象派生类可以覆盖基类的方法也可以不覆盖

⑥抽象类是对根源的抽象

⑦抽象类表示的是:这个对象是什么

⑧抽象类在代码实现方面发挥作用,可以实现代码重用

⑨抽象方法声明中不能使用static和virtual修饰符


相同点:

①都可以被继承

②都不能被实例化

③都可以包含方法声明

④派生类必须实现未实现的方法

不同点:

①抽象基类可以定义字段、属性、方法实现。接口只能定义属性、索引器、事件、方法声明。

②抽象类是一个不完整的类,需要进一步细化。接口是一个行为规范。

③抽象类只能被单一继承。接口可以被多重实现。

④抽象类更多的是定义在一系列紧密相关的类中。接口大多数是关系疏松但都实现某一功能的类中。

⑤抽象类是从一系类相关对象中抽象出来的概念,因此反应的是事物的内部共性。接口是为了满足外部调用而定义的一个功能约定,因此反应的是事物的外部特性。

⑥接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法。

⑦接口可以用于支持回调,而继承不具备这个特点。

⑧抽象类实现的具体方法默认为虚。接口的类中方法默认是非虚的,当然可以声明为虚的。

⑨如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中的方法。

⑩抽象类只能作用于引用类型。接口可以作用于值类型和引用类型。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、继承和多态在面向对象编程中,继承(也称为派生)让您能够创建新类,而这些类继承了父类(也称为基类)的特征和行为。...
    CarlDonitz阅读 860评论 0 2
  • 一、抽象类: 抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是...
    FrozenSunset阅读 516评论 0 3
  • 一、抽象类 1、抽象类含义的概括: 当多个类出现相同功能时,但功能主体不同,这样可以向上抽取,抽取时只抽取功能定义...
    玉圣阅读 848评论 0 6
  • 1、接口 • 接口是一种规范,是一种规则,它只给出了方法的样子,规定你要实现哪些方法,而不给出方法的实现,让接...
    coolchun阅读 677评论 0 3
  • 其实爱侣之间吵架的时候,越是强势的一方,反而内心中越是脆弱。 因为处于弱势的一方,所以往往需要树立起一个表面的强势...
    梦夕梦阅读 853评论 2 3