您的位置:首页 > 其它

[C # 读书笔记]interface 接口 abstract

2010-03-10 16:09 225 查看
抽象类和接口一般不容易区分,个人觉得接口比抽象类更加抽象。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ªœ8f
抽象类用来列举一个类所需要的行为但不明确提供每个行为的具体实现方法。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ªœ8f
当从抽象基类派生一个类时,派生类将继承基类所有的特性,它可以通过 override关键字用具体版本替换继承下来的抽象方法。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ªœ8f
如果该派生类没有从抽象基类继承下来的所有抽象方法提供具体实现,那么该派生类也是抽象类。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ªœ8f
0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ªœ8f
实现一个接口,概念上类似在扩充一个抽象类时填充其抽象方法,而两者的区别是:0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ªœ8f
0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ªœ8f
1.对于接口我们只抽象行为,而抽象类经常会包含具体的attribute,以及一些抽象行为和具体行为。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ªœ8f
从某种程度来讲,接口要比抽象类更为抽象,因为接口留下了更多的想象空间(抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。例如苹果、香蕉、生梨、葡萄、桃子等,它们共同的特性就是水果。得出水果概念的过程,就是一个抽象的过程。要抽象,就必须进行比较,没有比较就无法找到共同的部分。)0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ªœ8f
2.当从一个抽象类派生一个非抽象类时,派生类通过覆载手段,提供抽象方法具体实现,其方法头一定会包括override关键字。当一个类实现一个接口时,必须提供接口中声明的所有方法的具体实现。实现类并不覆载他们。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ªœ8f
3.抽象类不一定要覆载基类的所有抽象方法,如果有一个或多个抽象方法没有覆载那么该派生类也是一个抽象方法。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ªœ8f
4.一个类只能从一个基类派生,而一个类可以实现多个接口,同时接口可以作为数据类型返回。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ªœ8f
0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ªœ8f
从语法上看两者的区别为:0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ªœ8f
1.抽象类可能会声明数据结构(attribute),而接口不声明attribtute.0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ªœ8f
2.抽象类使用关键字abstract声明抽象方法,并添加其可访问性,而接口不能加Public或者Abstract关键字,而使用interface。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ªœ8f
3.抽象类可能会声明具体方法,而接口不声明具体方法。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ªœ8f
4.基类从抽象类继承所有的attribute,而且可以添加本身的attribute。而基类实现接口的时候必须提供自己的attribute,而接口无法提供。(例如继承来的变量,抽象类提供,而接口无法提供)0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ªœ8f
5.基类可以覆载从抽象类继承的抽象方法,而基类必须全部实现接口的方法,无需使用override关键字。0ϱ¸.2âæ(Vwww.nfhot.comºªÀá]ªœ8f
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: