抽象类和接口的区别
许多朋友搞不懂Java中抽象类和借口的区别,今天我们就来分析一下。
操作方法
(01)接口,在表面上是由几个没有主体代码的方法定义组成的集合体,有唯一的名称,可以被类或其他接口所实现(或者也可以说继承)。
(02)接口是一组规则的集合,它规定了实现本接口的类或接口必须拥有的一组规则。体现了自然界“如果你是……则必须能……”的理念。接口是在一定粒度视图上同类事物的抽象表示。注意这里我强调了在一定粒度视图上,因为“同类事物”这个概念是相对的,它因为粒度视图不同而不同。
(03)关于抽象类与接口,如果单从具体代码来看,对这两个概念很容易模糊,甚至觉得接口就是多余的,因为单从具体功能来看,除多重继承外(C#,Java中),抽象类似乎完全能取代接口。但是,难道接口的存在是为了实现多重继承?当然不是。抽象类和接口的区别在于使用动机。使用抽象类是为了代码的复用,而使用接口的动机是为了实现多态性。所以,如果你在为某个地方该使用接口还是抽象类而犹豫不决时,那么可以想想你的动机是什么。
(04)总而言之,接口与抽象类的区别主要在于使用的动机,而不在于其本身。而一个东西该定义成抽象类还是接口,要根据具体环境的上下文决定。再者,接口和抽象类的另一个区别在于,抽象类和它的子类之间应该是一般和特殊的关系,而接口仅仅是它的子类应该实现的一组规则。(当然,有时也可能存在一般与特殊的关系,但我们使用接口的目的不在这里)如,交通工具定义成抽象类,汽车、飞机、轮船定义成子类,是可以接受的,因为汽车、飞机、轮船都是一种特殊的交通工具。再譬如Icomparable接口,它只是说,实现这个接口的类必须要可以进行比较,这是一条规则。如果Car这个类实现了Icomparable,只是说,我们的Car中有一个方法可以对两个Car的实例进行比较,可能是比哪辆车更贵,也可能比哪辆车更大,这都无所谓,但我们不能说“汽车是一种特殊的可以比较”,这在文法上都不通。
(05)Android中ListView作为开发最常用的组件之一,我们经常要使用自定义的Adapter来达到我们的目的,因此写一个自己的BaseAdapter是很常见的事情,而重写BaseAdapter的目的就是为了少写重复代码和实现自己想要的getview()函数,这里我们看看这个抽象类:
(06)我们再来看看接口,接口的目的是为了让实现接口的对象一不同方式实现同一方法,而不是为了减少重复代码,这里举一个Cache的代码,这一接口是制定了缓存对象的规则,即实现缓存的对象必须要实现接口里定义的方法,这样才能保证缓存功能的完整:
-
AutoCAD2016如何设置经典模式
CAD软件版本在不断的升级更新,其功能越来越强大,在我们使用该软件是不是还在留恋CAD的经典模式呢,下面我们就来看看AutoCAD2016如何设置经典模式的吧。操作方法(01)在桌面上双击CAD2016的快捷图标,打开CAD2016这款软件,进入CAD2016的操作界面,如图所示:(02)在该软件的下面...
-
HTML分隔线如何美化?
做HTML页面开发时,在几段文本之间,或几块内容之间,经常会使用分隔线去做分隔,以让页面显示更加有条理。分隔线我们基本上都是用hr标签去生成,怎么去美化这个分隔线?下面一起看下。操作方法(01)先看下我们的html代码,二个p段落,中间用hr作分隔,代码如图。(02)页面运行后,可以...
-
华为悦盒看电视直播
华为悦盒内置的程序中并没有看电视直播的软件,安装一个电视家即可,让小编教给你安装指南。操作方法(01)将电视与华为悦盒用数据线连接好后,打开电视机和华为悦盒的电源,等待系统启动。(02)在电脑上将下载好的电视直播程序存放到U盘上,并将U盘插入到华为悦盒上。(03)在华为...
-
实例讲解Flash中如何制作旋转球体动画
Flash是一款专门用来制作动画的软件工具,在网上就有很多的破解版本,下载破解绿色版本的安装包比较容易安装。Flash的界面简洁,功能齐全。现在,我们用实际例子看看怎么在Flash中制作旋转球体动画吧。操作方法(01)新建文档双击桌面上的fla图标,打开软件。在动画软件菜单...