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

走出abstract class与interface的困惑[Java编程]

赞助商链接



  本文“走出abstract class与interface的困惑[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

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

理解抽象类 abstract class和interface在Java语言中都是用来举行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言顶用于定义抽象类的一种办法,请读者注意辨别)定义的,那么什么是抽象类,利用抽象类能为我们带来什么好处呢?

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

在面向对象范畴,抽象类主要用来举行范例躲藏.我们可以构造出一个固定的一组行为的抽象描写,但是这组行为却可以有肆意个大概的具体实现方法.这个抽象描写就是抽象类,而这一组肆意个大概的具体实现则表现为全部大概的派生类.模块可以操作一个抽象体.由于模块依靠于一个固定的抽象体,因此它可以是不答应改正的;同时,通过从这个抽象体派生,也可扩大此模块的行为功效.熟习OCP的读者一定知道,为了可以实现面向对象计划的一个最核心的原则OCP(Open-Closed Principle),抽象类是此中的关键所在.

从语法定义层面看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.

从编程的角度来看,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间举行挑选时要非常的当心.


  以上是“走出abstract class与interface的困惑[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 走出abstract class与interface的困惑
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

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

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