接口与抽象类区别
2016-05-26 14:14
357 查看
抽象类和接口在语法上的区别比较明显,本文不做讨论,此处讨论为其概念上的区别。
《Java核心技术》中对接口的定义为:
In the Java programming language, an interface is not a class but a set of requirements for the classes that want to conform to the interface.
由a set of requirements for the classes 此描述不难看出《Java核心技术》定义接口为类的组件,可以以实现接口的方式自由地将接口组装到类上,让类拥有更加强大的功能。
但此书中并未直接对抽象类和接口进行对比。
《Java编程思想》中对接口的定义为:
抽象类:抽象类是普通类和接口之间的中庸之道,需要使用因为不可能总使用接口。(用接口用腻了,所以就用使用抽象类了?)通用方法建立起一种基本形式,以此表示子类的共同部分,此类方法是不完整的,仅包含声明不包含实现,即抽象方法。
接口:使抽象更进一步,interface关键字产生一个完全抽象的类,只提供了形式,不提供任何具体实现。接口被用来建立类与类之间的协议。
综合上面两本书,总结了一下自己的理解:
抽象类定义类型,定义一个抽象的事物,定义“是什么”这个概念,可以有属性,有方法(功能)。.
接口定义功能,定义”能干什么“这个概念。可以作为组件为事物添加的功能,功能本身也可以包含功能需要的常量(接口域),功能也可以扩展功能(接口继承接口)等等。
例如
抽象类定义汽车,汽车类实现运货接口,则这个汽车可以运货,可以为汽车组装其他功能(实现多个接口),为汽车增加飞行的功能(实现飞行接口),会飞的汽车也还是汽车,无法改变它是汽车的事实。抽象类定义轮船,同样可以为轮船添加运货功能,虽然汽车与轮船都能货运,但是依然是不同的事物。
事物本质是什么是唯一的,本质不可变,然而事物却可以通过组装功能拥有不同的丰富的能力,这可能也是Java单继承,多实现的理由之一吧。
《Java核心技术》中对接口的定义为:
In the Java programming language, an interface is not a class but a set of requirements for the classes that want to conform to the interface.
由a set of requirements for the classes 此描述不难看出《Java核心技术》定义接口为类的组件,可以以实现接口的方式自由地将接口组装到类上,让类拥有更加强大的功能。
但此书中并未直接对抽象类和接口进行对比。
《Java编程思想》中对接口的定义为:
抽象类:抽象类是普通类和接口之间的中庸之道,需要使用因为不可能总使用接口。(用接口用腻了,所以就用使用抽象类了?)通用方法建立起一种基本形式,以此表示子类的共同部分,此类方法是不完整的,仅包含声明不包含实现,即抽象方法。
接口:使抽象更进一步,interface关键字产生一个完全抽象的类,只提供了形式,不提供任何具体实现。接口被用来建立类与类之间的协议。
综合上面两本书,总结了一下自己的理解:
抽象类定义类型,定义一个抽象的事物,定义“是什么”这个概念,可以有属性,有方法(功能)。.
接口定义功能,定义”能干什么“这个概念。可以作为组件为事物添加的功能,功能本身也可以包含功能需要的常量(接口域),功能也可以扩展功能(接口继承接口)等等。
例如
抽象类定义汽车,汽车类实现运货接口,则这个汽车可以运货,可以为汽车组装其他功能(实现多个接口),为汽车增加飞行的功能(实现飞行接口),会飞的汽车也还是汽车,无法改变它是汽车的事实。抽象类定义轮船,同样可以为轮船添加运货功能,虽然汽车与轮船都能货运,但是依然是不同的事物。
事物本质是什么是唯一的,本质不可变,然而事物却可以通过组装功能拥有不同的丰富的能力,这可能也是Java单继承,多实现的理由之一吧。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树