对照《C#数据结构》、《大话数据结构》、《数据结构算法与应用c++语言》学习数据结构知识...

    《C#数据结构》预备知识:接口及泛型。《大话数据结构》预备知识:指针。《数据结构算法与应用c++语言》预备知识:模板。将上述基础知识做到融会贯通,三本书才能看懂学会。三部书互有补充,对照学习后应该能将数据结构知识学习的较为透彻。

      接口一个很重要的概念是接口只包含成员定义,不包含成员的实现。接口不会继承自任何的System.Object派生类型。接口仅仅是一个包含着一组虚方法的抽象类型。成员的实现需要在继承的类或者结构中实现。接口的成员包括静态方法、索引器、常数、事件以及静态构造器等,不包含任何实例字段或实例构造器,所以,不能实例化一个接口。
      实现接口的类必须严格按其定义来实现接口的每个成员。接口本身一旦被发布就不能再更改,对已发布的接口进行更改会破坏现有的代码。

    接口与抽象类
    抽象类(Abstract Class)和接口在定义与功能上有很多相似的地方,在程序中选择使用抽象类还是接口需要比较抽象类和接口之间的具体差别。
抽象类是一种不能实例化而必须从中继承的类,抽象类可以提供实现,也可以不提供实现。子类只能从一个抽象类继承。抽象类应主要用于关系密切的对象。如果要设计大的功能单元或创建组件的多个版本,则使用抽象类。
接口是完全抽象的成员集合,不提供实现。类或者结构可以继承多个接口。接口最适合为不相关的类提供通用功能。如果要设计小而简练的功能块,则使用接口。接口一旦创建就不能更改,如果需要接口的新版本,必须创建一个全新的接口。

    1)接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。体现了自然界“如果你是……则必须能……”的理念。

    2)接口是在一定粒度视图上同类事物的抽象表示。注意这里我强调了在一定粒度视图上,因为“同类事物”这个概念是相对的,它因为粒度视图不同而不同。

   

以下是我在网上看到的几个形象比喻,真的非常不错,呵呵:
1.飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;但是F22属于飞机抽象类,鸽子属于鸟抽象类。

2. 就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口)也可以有门铃(多实现)。 门(抽象类)定义了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染))。

 理解:

    抽象类和接口的区别在于使用动机。使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性。

    类是对象的抽象,接口是方法的抽象
    类是对象的模板,接口是类的模板,是一种特殊的类.规定类应该具有的功能不关心具体实现

 

转载于:https://www.cnblogs.com/xiaoxiaohua/archive/2012/11/04/2677560.html

你可能感兴趣的:(对照《C#数据结构》、《大话数据结构》、《数据结构算法与应用c++语言》学习数据结构知识...)