您的位置:首页 > 编程语言 > Java开发

接口与抽象类区别

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 接口 抽象类