【问题标题】:Why abstract class fields are not static implicitly为什么抽象类字段不是隐式静态的
【发布时间】:2015-03-01 11:48:47
【问题描述】:

根据这个问题https://stackoverflow.com/questions/2430756/why-are-interface-variables-static-and-final-by-default

公认的答案是,接口字段是隐式静态的,因为我们无法实例化它。

但是抽象类不应该是同样的情况吗?由于无法实例化抽象类,那么该抽象类的字段不应该也是静态的吗?

我知道它们不是静态的,但谁能解释一下原因。

【问题讨论】:

  • 不,因为那样你就不能让它们不是静态的。这样,如果需要,您可以将它们设为静态。

标签: java interface abstract-class


【解决方案1】:

这不是接口字段默认为静态的原因。原因是接口可能不定义实例字段。

一个抽象类可以,所以如果字段默认是静态的,你不能在不引入额外无用的instance关键字的情况下声明普通的实例字段。那会非常混乱。

【讨论】:

    【解决方案2】:

    抽象类不能被实例化,但它们旨在用作具体类的基类,而具体类又可以被实例化。

    接口字段必须是静态的主要原因不是接口不能被实例化;这是因为一个类可以从多个接口继承,因此可以从多个地方继承状态。在允许这种情况的 C++ 等语言中可能(并且确实)出现各种棘手的情况。

    【讨论】:

      猜你喜欢
      • 2014-01-24
      • 2011-06-21
      • 2014-01-31
      • 2015-04-19
      • 2011-01-13
      • 2011-04-02
      • 2010-09-27
      • 2015-08-31
      • 1970-01-01
      相关资源
      最近更新 更多