AntSoul

它总是在行走,行走,永远的行走…… 行走是它生存的恒久姿态和最佳造型。 它似乎有一双不知疲倦的脚。 ———我说的是蚂蚁。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  42 随笔 :: 0 文章 :: 1 评论 :: 0 Trackbacks
        在Java语言中,可以定义一种抽象类型,并且提供这种这一抽象类型的各种具体实现。实际上Java给我们提供不只是一种机制而是两种让我们可以做到这一点。它们是Java接口和Java抽象类。二者的区别如下:
       (1) 两者最明显的区别在于,Java抽象类可以提供部分方法的实现,而Java接口不能。这是Java抽象类的有点也是优势。如果向一个抽象类加入一个新的具体的方法,那么所有的子类一下子就得到了这个新的具体的方法。如果向一个接口中加入一个新的方法,所有实现这个接口的类都不能全部成功的通过编译,因为它们没有实现这个新声明的方法。这就是Java接口的一个缺点了。
       (2) 一个抽象类的实现只能由这个抽象类的子类给出,那么,这个实现出在抽象类所定义出的继承的等级结构中,而由于Java语言限制多继承,因此抽象类作为类型定义工具的效果就大打折扣了。反之,任何一个实现了Java接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现多个接口。这也是两者最重要的区别之一。
      (3) 从代码重构的角度上看,将一个单独的Java具体类重构为一个Java接口的实现是很容易的。我们只需要声明一个接口,并将重要的方法添家到接口声明中,然后在具体的类定义语句后加上一个何时的implments就OK了。而为一个已有的具体类添加一个抽象类作为抽象类型却不是那么的容易了,因为这个具体类有可能已经有了一个超类,这样以来,这个新定义的抽象类只好继续向上移动,变成这个超类的超类,如此循环,最后这个新定义的抽象类必定处于整个等级类型结构的最上端,从而使得等级结构中的所有成员都受到影响。
      (4) Java接口是定义混合类型的理想工具。Mixin Type就是在一个类主类型之外的次类型。一个混合类表明一个类不仅具有主类型的行为,而且还具有其它的行为。比如Hashtabl类就具有多个类型。它的主类型为Map,这是一种Java聚集。而Cloneable接口则给出了一个次要类型,这个类型说明这个类是可以安全克隆的。同样,Serializable也是一个次要类型,它表明这个类是可以串行化的。
posted on 2007-03-29 10:00 yok 阅读(919) 评论(0)  编辑  收藏 所属分类: CoreJava

只有注册用户登录后才能发表评论。


网站导航: