worfchina
2007-02-09 13:26
接口不能被实例化,所以其成员变量必须为不可修改的,就是常量。
jiu shi l

Edgra
2007-03-09 14:48
反问他, 如果你定义。 有啥意义???

icen
2007-03-11 11:20
如果接口中定义的是变量,而且接口中的变量可是public static的
那么如果一个方法改变了该接口的变量的值的话,这样破坏了封装性,所有当前程序中访问该接口的方法,所有实现了该接口的对象的值都会跟着变,这会引起很大的混乱的。

[该贴被icen于2007年03月11日 11:22修改过]

zhouxu
2007-03-11 22:51
Java因为不支持多继承而广泛使用接口,可能这条规定也只是为了简化语言本身,除此之外我想不出还有什么特别的意义。
一个接口实例的改变不会对其它程序有影响,也没听说有理论强调在"接口"中定义变量就不好。

Coolyu0916
2007-03-12 09:06
在接口中定义常量基本上意义不大
除了为了一些特殊的标识

kungstriving
2007-03-28 11:29
JAVA在接口定义中,会将接口中的所有变量默认定义为public static final,就算你只是定义int i = 0; java也会将它转化为public static final int i = 0;

piaochunzhi
2007-03-28 12:36
这 种公司不去也就那样了!

不会是 isofts。。。。。。 这个 垃圾公司吧

richit
2007-04-08 08:22
学习。。。

colina
2007-04-08 15:43
学习!

njlinj
2007-04-08 23:03
积累~

fanfan6621
2007-05-26 14:26
leoyu的说法是正确的,我补充以下。
如果接口可以定义变量,但是接口中的方法又都是抽象的,在接口中无法通过行为来修改属性。有的人会说了,没有关系,可以通过实现接口的对象的行为来修改接口中的属性。这当然没有问题,但是考虑这样的情况。如果接口A中有一个public访问权限的静态变量a。按照java的语义, 我们可以不通过实现接口的对象来访问变量a,通过A.a = xxx;就可以改变接口中的变量a的值了。正如抽象类中是可以这样做的,那么实现接口A的所有对象也都会自动拥有这一改变后的a的值了,也就是说一个地方改变了a,所有这些对象中a的值也都跟着变了。这和抽象类有什么区别呢,怎么体现接口更高的抽象级别呢,怎么体现接口提供的统一的协议呢,那还要接口这种抽象来做什么呢?所以接口中不能出现变量,如果有变量,就和接口提供的统一的抽象这种思想是抵触的。所以接口中的属性必然是常量,只能读不能改,这样才能为实现接口的对象提供一个统一的属性。

通俗的讲,你认为是要变化的东西,就放在你自己的实现中,不能放在接口中去,接口只是对一类事物的属性和行为更高层次的抽象。对修改关闭,对扩展(不同的实现implements)开放,接口是对开闭原则的一种体现。

rose
2007-06-23 14:52
支持fanfan6621的说法。

yijianfengyu
2007-07-25 09:20
其实这个题目非常好,就测试你对开闭原则的理解!

simic
2007-07-30 14:06
哈哈 这个题目相当高明

不能简单回答说 java规范规定了不能在interface中定义变量。

因为规范这么规定肯定是有他的thinking 当然了java规范里确实还有很多不可理解的定义。。

interface里定义变量 比如定义一个 publc string name; 那还不如定义getName or/and setName 方法来的好 因为直观的表明了这个interface的行为是能供查询name 还是可以修改name。

abstract class 可以的定义变量 因为abstract class里还有普通的方法 而这些方法可能会需要用到变量。

cnboyzq
2007-08-02 15:31
>>taia

你这个是 抽象类, 纯接口不可以呀.