当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:16:00  来源:本站整理

Java底子:浅析Java抽象类和接口的比较[Java编程]

赞助商链接



  本文“Java底子:浅析Java抽象类和接口的比较[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

abstract class和interface是Java语言中关于抽象类定义举行支持的两种机制,恰是由于这两种机制的存在,才赋予了Java强盛的面向对象本领.abstract class和interface之间在关于抽象类定义的支持方面具有很大的类似性,乃至可以彼此替换,因此很多开辟者在举行抽象类定义时关于abstract class和interface的挑选显得对比随便.其实,二者之间还是有很大的辨别的,关于它们的挑选乃至反映出关于问题范畴本质的理解、关于计划企图的理解能否精确、公道.本文将对它们之间的辨别举行一番解析,试图给开辟者供应一个在二者之间举行挑选的根据.

理解抽象类 

在面向对象的概念中,我们知道全部的对象都是通过类来描绘的,但是反过来却不是这样.并非全部的类都是用来描绘对象的,假如一个类中没有包含充足的信息来描绘一个具体的对象,这样的类就是抽象类.抽象类常常用来表征我们在对问题范畴举行解析、计划中得出的抽象概念,是对一系列看上去差别,但是本质上相同的具体概念的抽象.比方:假如我们举行一个图形编辑软件的开辟,就会发现问题范畴存在着圆、三角形这样一些具体概念,它们是差别的,但是它们又都属于形状这样一个概念,形状这个概念在问题范畴是不存在的,它就是一个抽象概念.恰是因为抽象的概念在问题范畴没有对应的具体概念,所以用以表征抽象概念的抽象类是不可以实例化的. 下面从三个方面举行对比:

1、从语法定义层面看abstract class和interface

在语法层面,Java语言关于abstract class和interface给出了差别的定义方法,下面以定义一个名为Demo的抽象类为例来阐明这种差别.

利用abstract class的方法定义Demo抽象类的方法以下:

abstract class Demo {
abstract void method1();
abstract void method2();

利用interface的方法定义Demo抽象类的方法以下:

interface Demo {
void method1();
void method2();

}

在abstract class方法中,Demo可以有自己的数据成员,也可以有非abstarct的成员办法,而在interface方法的实现中,Demo只可以有静态的不能被改正的数据成员(也就是必须是static final的,不过在interface中普通不定义数据成员),全部的成员办法都是abstract的.从某种意义上说,interface是一种特别情势的abstract class.

2、从编程层面看abstract class和interface

从编程的角度来看,abstract class和interface都可以用来实现"design by contract"的思惟.但是在具体的利用上面还是有一些辨别的.

首先,abstract class在Java语言中表示的是一种担当关系,一个类只能利用一次担当关系.但是,一个类却可以实现多个interface.大概,这是Java语言的计划者在考虑Java关于多重担当的支持方面的一种折中考虑吧.

其次,在abstract class的定义中,我们可以赋予办法的默许行为.但是在interface的定义中,办法却不能拥有默许行为,为了绕过这个限制,必须利用拜托,但是这会 增添一些复杂性,有时会造成很大的麻烦.

在抽象类中不能定义默许行为还存在另一个对比严重的问题,那就是大概会造成保护上的麻烦.因为假如后来想改正类的界面(普通通过abstract class大概interface来表示)以适应新的情形(比方,增添新的办法大概给已用的办法中增添新的参数)时,就会非常的麻烦,大概要耗费很多的时间(关于派生类很多的情形,尤为如此).但是假如界面是通过abstract class来实现的,那么大概就只需求改正定义在abstract class中的默许行为便可以了.

一样,假如不能在抽象类中定义默许行为,就会招致一样的办法实现呈目前该抽象类的每一个派生类中,违反了"one rule,one place"原则,造成代码反复,一样不利于今后的保护.因此,在abstract class和interface间举行挑选时要非常的当心.

3、从计划理念层面看abstract class和interface

上面主要从语法定义和编程的角度阐述了abstract class和interface的辨别,这些层面的辨别是对比低层次的、非本质的.本小节将从另一个层面:abstract class和interface所反映出的计划理念,来解析一下二者的辨别.作者认为,从这个层面举行解析才能理解二者概念的本质所在.

前面已经提到过,abstarct class在Java语言中表现了一种担当关系,要想使得担当关系公道,父类和派生类之间必须存在"is a"关系,即父类和派生类在概念本质上应当是相同的(参考文献〔3〕中有关于"is a"关系的大篇幅深化的阐述,有爱好的读者可以参考).关于interface 来说则不然,并不要求interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约罢了.为了使阐述便于理解,下面将通过一个简单的实例举行阐明.

考虑这样一个例子,假定在我们的问题范畴中有一个关于Door的抽象概念,该Door具有履行两个行动open和close,此时我们可以通过abstract class大概interface来定义一个表示该抽象概念的范例,定义方法辨别以下所示:

利用abstract class方法定义Door:

abstract class Door {
abstract void open();
abstract void close();
}

利用interface方法定义Door:

interface Door {
void open();
void close();
}


  以上是“Java底子:浅析Java抽象类和接口的比较[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 利用Javascript实现网页水印(非图片水印)
  • Java开辟环境的搭建
  • Ubuntu java安装与配置
  • 办理Ubuntu 10.04 Firefox3.6 Java浏览器插件不工作的问
  • Ubuntu重装后Java环境的设置
  • Sun Java进入Ubuntu 10.10软件中央
  • Ubuntu 10.10配置Java开辟环境
  • 在Ubuntu 10.10中配置Java环境变量的办法
  • Ubuntu下Java环境的搭建
  • Ubuntu 10.04 下安装 Java, JRE
  • Ubuntu 10.04下的搭建SUN JAVA开辟环境
  • Ubuntu 12.04安装java7
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .