Chinaunix首页 | 论坛 | 博客
  • 博客访问: 106393
  • 博文数量: 40
  • 博客积分: 1650
  • 博客等级: 上尉
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-20 13:05
文章分类
文章存档

2011年(1)

2009年(1)

2008年(1)

2007年(37)

我的朋友

分类: Java

2009-11-02 22:40:06

  abstract class和interface在Java语言中都是用来进行抽象类定义的。那么什么是抽象类呢?在面向对象领域,抽象类主要用来进行类型隐藏。 我们可以构造出一个固定的一组行为的抽象描 述,但是这组行为却能够有任意个可能的具体实现方式。这个抽象描述就是抽象类,而这一组任意个可能的具体实现则表现为所有可能的派生类。
从语法定义上来看,在abstract class可以有自己的数据成员,也可以有非 abstract的成员方法,而在interface方式的实现中,只能够有静态的不能被修改的数据成员(也就是必须是static final 的,不过在interface中一般不定义数据成员),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊形式的 abstract class。
从编程的角度来看,abstract class和interface都可以用来实现 "design by contract" 的思想。但是在具体的使用上面还是有一些区别的:
abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系;但是,一个类却可以实现多个interface;
在abstract class的定义中,我们可以赋予方法的默认行为。但是在interface的定义中,方法却不能拥有默认行为。
实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。
抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。
接口中的方法默认都是 public,abstract 类型的。
从设计理念层面看,abstract class表示的是"is-a"关系,interface表示的是"like-a"关系,大家在选择时可以作为一个依据,当然这是建立在对问题领域的理解上的。
具体细节还需要大家去细细体会。
阅读(913) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~