Chinaunix

标题: java中abatract class和interface的区别 [打印本页]

作者: ggf0101    时间: 2009-11-02 22:40
标题: java中abatract class和interface的区别
  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"关系,大家在选择时可以作为一个依据,当然这是建立在对问题领域的理解上的。
具体细节还需要大家去细细体会。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/43678/showart_2084998.html




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2