查看完整版本: 抽象类和接口的区别(C#)

语过添情 2008-3-9 15:19

抽象类和接口的区别(C#)

做过OO开发的人都清楚抽象类和接口,可是他们之间的区别和联系也许并不是那么容易区分
抽象类用来列举一个类所需要的行为但不明确提供每个行为的具体实现方法。当从以抽象基类派生一个类时,派生类将继承基类所有的特性,它可以通过override关键字用具体版本替换继承下来的抽象方法。如果该派生类没有从抽象基类继承下来的所有抽象方法提供具体实现,那么该派生类也是抽象类。

       实现一个接口,概念上类似在扩充一个抽象类时填充其抽象方法,而两者的区别是:

      1.对于接口我们只抽象行为,而抽象类经常会包含具体的attribute,以及一些抽象行为和具体行为。从某种程度来讲,接口要比抽象类更为抽象,因为接口留下了更多的想象空间(抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。例如苹果、香蕉、生梨、葡萄、桃子等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象的过程。要抽象,就必须进行比较,没有比较就无法找到共同的部分。)
      2.当从一个抽象类派生一个非抽象类时,派生类通过覆载手段,提供抽象方法具体实现,其方法头一定会包括override关键字。

     3.当一个类实现一个接口时,必须提供接口中声明的所有方法的具体实现。实现类并不覆载他们。

     4.抽象类不一定要覆载基类的所有抽象方法,如果有一个或多个抽象方法没有覆载那么该派生类也是一个抽象方法。

     5.一个类只能从一个基类派生,而一个类可以实现多个接口。

    从语法上看两者的区别为:

     1.抽象类可能会声明数据结构(attribute),而接口不声明attribtute.

    2.抽象类使用关键字abstract声明抽象方法,并添加其可访问性,而接口不能加Public或者Abstract关键字。

     3.抽象类可能会声明具体方法,而接口不声明具体方法。

     4.基类从抽象类继承所有的attribute,而且可以添加attribute,而基类实现接口的时候必须提供自己的数据结构,而接口无法提供。

     5.基类可以覆载从抽象类继承的抽象方,而基类必须全部实现接口的方法,无需使用override关键字。

Nic 2008-3-17 12:08

回复 1# 的帖子

呵呵  不错 ···:victory:

Beverly 2008-3-17 17:59

恩,还是比较容易搞混的...

johnson 2008-3-18 08:45

__a7
要是能在给出一段代码加以说明就更好了

johnson 2008-3-27 22:08

__a1 弄点代码举例说明一下

89_G 2008-4-11 11:30

__a15

xing 2008-4-21 20:31

不错不错!!!
但是我不懂__a15

stuxml 2008-4-21 20:51

__a11


好东西,但是,,需要 基础 才能看懂,,,

顶下


__a11

welcome 2008-4-22 10:59

test

丽丽08 2008-9-3 05:09

百度好帮手

*** 作者被禁止或删除 内容自动屏蔽 ***

12346 2008-11-21 08:08

不错 简洁并重点了概括了
页: [1]
查看完整版本: 抽象类和接口的区别(C#)