【问题标题】:Why is a interface data member public and static? [duplicate]为什么接口数据成员是公共的和静态的? [复制]
【发布时间】:2014-02-25 18:24:58
【问题描述】:

为什么java隐式地把接口数据成员设为public&static?

【问题讨论】:

  • “数据成员”是指“字段”,对吧?
  • @JeroenVannevel 你可以粘贴链接为什么你在评论中发布了解释?
  • 您在寻找什么样的答案?因为唯一的官方答案是“JLS 这么说”。 JLS 不提供设计原因,只提供设计本身。
  • @NambiNarayanan:链接是上下文。我确保我发布的内容具有独立的价值,每个人都应该这样做。
  • @JeroenVannevel 我看不出您对 9.2 的引用有何相关性。这里只讨论接口隐式继承自Object类的方法,即toString()equals()等。

标签: java oop


【解决方案1】:

接口仅描述外部行为,或“其他人如何看待实现此接口的类的对象” - 从这个角度来看,将与内部行为如此内在耦合的事物定义为字段是没有用的。如果一个人想要规定内部行为,抽象类显然是要走的路。

【讨论】:

  • 公开和静态无答案
  • 是的,我在等待有人想在接口上定义私有方法的那一天。
【解决方案2】:

稍微扩展 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";

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-15
    • 2014-10-26
    • 2012-03-28
    • 1970-01-01
    • 2013-04-11
    • 2017-04-02
    • 1970-01-01
    • 2015-02-10
    相关资源
    最近更新 更多