[C # 读书笔记]interface 接口 abstract
2010-03-10 16:09
281 查看
抽象类和接口一般不容易区分,个人觉得接口比抽象类更加抽象。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
抽象类用来列举一个类所需要的行为但不明确提供每个行为的具体实现方法。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
相关文章推荐
- 面向对象多态的实现(抽象类Abstract和接口Interface的用法区别)
- 抽象类(abstract)与接口(interface)
- 抽象类(abstract)和接口(interface)的区别
- 接口和抽象类:Interface、abstract
- PHP 的 抽象类 abstract 和 接口 interface
- java接口:interface 的和抽象类:abstract
- 面对对象4【抽象abstract】【接口interface】【多态】【instanceof关键字】【Object类】
- 接口(Interface)替代抽象(Abstract)
- 模式乱写之2 : 接口VS抽象类 Interface VS Abstract Class
- 什么是接口?接口有哪些好处,抽象类(abstract)和接口(interface)的区别
- 黑马程序员_面向对象2_(继承、多态、抽象类abstract、接口interface、内部类)
- abstract 和 interface 抽象类和接口的区别
- Java之抽象(abstract)类、接口(interface)的用法总结
- Java 学习笔记 (3) -抽象类 abstract 接口 interface 内部类 inner class 继承 extends 实现 implements 包 package
- abstract(抽象类)和Interface(接口)总结
- Java中 关键字final,抽象类abstract, 接口interface ,多态
- 抽象类(abstract) 与 接口类(interface)
- abstract,以及abstract抽象类与interface接口的区别
- interface,abstract class,abstract interface Java中的接口,抽象类和抽象接口的异同
- php 静态成员(static)抽象类(abstract)和接口(interface)