为什么接口数据成员是公共和静态的



为什么Java隐式地将接口数据成员公开和静态?

接口只描述外部行为,或者"其他人如何看待实现此接口的类的对象" - 从这个角度来看,将如此固有地耦合到内部行为的东西定义为一个字段是相当无用的。如果一个人想规定内部行为,抽象类显然是要走的路。

稍微扩展一下 Smutje 的答案:不允许接口定义自己的数据。 正因为如此,我怀疑语言设计者认为数据定义的唯一合法用途是定义一个可能被客户端使用的常量;因此,javax.swing中的Action接口有一个方法

void putValue(String key, Object value)

并且该接口还定义了一些可用于key的常量:

public static final String ACTION_COMMAND_KEY = "ActionCommandKey";
public static final String ACCELERATOR_KEY = "AcceleratorKey";

等。 当然,由于这些是常量,因此它们不是存储在实现接口的每个对象中的数据。 但这些是接口中唯一允许的数据字段。

最新更新