接口能不能被看成更纯粹的抽象类?如果这样想的话可能会好理解一点儿。

接口是用来被实现的.实现了的接口是被上层调用的.如果接口的变量是非常量.当你的接口被调用的时候那个变量有意义吗?
所以,不是JAVA设计规范规定了接口的变量必须常量.而是如果接口中的变量是非常量.此变量就毫无意义.故必须是常量才有意义.

举个形象的例子:
USB接口用过吧.国际组织定义USB接口的长度和宽度.厂商实现该接口,如IBM生产了一种,HP生产了一种,如果定义的USB接口的长度和宽度不是常量的话,这两个接口能统一的用吗.
国际组织定义USB接口的长度和宽度,就是你说的接口的变量.

换个角度去想,其实接口就是一个规范,目的是为了可以按照这个规范去编程,那样不同的风格才能够统一起来,就好像电插座接口,电线必须按照插座的接口去设计,手机有诺基亚,摩托罗拉,但功能必须实现打电话的接口规范,这就是接口,现实世界中的规则,由于是高度抽象,不具备实例方法,常量就是其中规范的约束,完全同意楼上的说法。
[该贴被boby2046于2007年08月21日 15:30修改过]

to 7、8楼的taia
请问java中定义接口和抽象类的关键字分别是什么?
还有,在接口中确实可以定义一个普通的变量,但是你必须给这个变量赋初值,因为系统会隐含的将这个变量声明为final类型的变量,也就是常量了。也就是说,不管你在接口中怎么定义一个变量,系统都会默认为fianl的常量。

面向对象思想中的一切东西在现实中都有对照。

接口就是现实中的“协议”或“规则”。

国家法律就是规则,法律规定抢劫判10年(即接口中定义一个变量值为10),你能改动法律吗?

接口只是一种规范,并没有实现功能.可以理解为一种特殊的类:由常量和抽象方法组成的可以实现多重继承的类.java书上是这样定义的.至于为什么要这样定义,因为接口是对外的一种规范,并没有实现功能.没有必要为其定义变量.所有的类实现某接口,都是一样的.如果定义为变量,那么不同的类实现相同的接口那么得的功能就不一样了.那么定义接口的意义就失去了.

说的对

>>接口中的属性必然是常量,只能读不能改,这样才能为实现接口的对象提供一个统一的属性。

赞同,

你那个是抽象类 不是接口 呵呵
楼下好多人被你蒙了 !!^_^^_^

我对tita 说的 ^_^

学习一下 J道第一贴(刚注册的 :))

使用abstract class的方式定义Demo抽象类的方式如下:

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

使用interface的方式定义Demo抽象类的方式如下:

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

}

在abstract class(可以看作是abstract 方法和非abstract方法的集合) 方式中,Demo可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface(可以看作是是abstract 方法(但在interface没有显示的写出)和常量(默认为public static final)定义的集合)方式的实现中,Demo只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在interface中一般不定义数据成员,这是为了修正C++多重继承出现的问题,多重继承中包括多个父类之间可能出现重复的成员变量,在引用时就会出现问题),所有的成员方法都是abstract的。从某种意义上说,interface是一种特殊形式的abstract class。
(这是我看了一篇interface与abstract的文章后,并作出了一点修改,若有不足的地方,请大家多多指教!)

楼主还是没真正理解“接口”的定义和OO思想啊,呵呵,理解这些,就不需要提这个问题

这个是规定吧~难道还有其他的???
[该贴被HONDO于2008-03-04 16:53修改过]