日期:2014-05-20  浏览次数:21038 次

请教大家关于接口内是否可以包含成员变量的问题!!
公司考试的试题中有一道判断题:
接口不包含成员变量和方法实现。
我选择的而是错,因为接口中可以包含成员变量(其实就是接口常量),但是答案是对的,我与出题人交流时无法达成一致,他的理由是:


首先,对于变量和常量做一个澄清。常量就是不可以被改变的数值。变量就是可以被改变的数值。如果模糊一点,也可以都叫做变量。
 
对于接口中定义的变量,编译器会默认它是常量,不可更改。等同于 final static。
 
其次,对于接口来说,本身是不不可以被实例化,也不能包含任何可变的数据。您给出的例子是类中的变量,而不是接口。
 
 
因此,“Java中,接口不包含成员变量和方法实现”我认为是没有问题的。


我无法说服他,所以在这里请教大家,究竟他说的对不对?
java j2ee j2se javaEE

------解决方案--------------------
1、从语法上讲,接口包含成员变量,例如 public int a=6;这是没有任何错误的。
2、java对接口编译的时候会将变量当做常量处理。
所以啊,楼主,你是对的,我支持你。语法是语法,实际是实际,不能一概而论吧。如果都按照实际的话,那么为什么java对接口的处理,在里面可以使用1中的语法呢?为什么不直接定死为只能是public static之类的呢?其中的道理本人太菜,理解不了。
------解决方案--------------------
看情况而定,比如有个实体(或者领域模型)叫Event,有一个Service接口,叫EventService
Event里有个属性 evtStatus

我完全可以把evtStatus的枚举值放在EventService里,比如:
public interface EventService extends Xxx{

public enum EvtStatus {
INSERT("I"), UPDATE("U"), DELETE("D");
...
}

其他方法...
}