【发布时间】:2011-01-13 17:41:58
【问题描述】:
为什么 Java 类不能有抽象字段,就像它们可以有抽象方法一样?
例如:我有两个扩展同一个抽象基类的类。这两个类都有一个相同的方法,除了一个字符串常量,这恰好是一个错误消息,在它们里面。如果字段可以是抽象的,我可以使这个常量抽象并将方法拉到基类中。相反,我必须创建一个抽象方法,在这种情况下称为 getErrMsg(),它返回字符串,在两个派生类中重写此方法,然后我可以调用该方法(现在调用抽象方法)。
为什么我不能一开始就将字段抽象化? Java 的设计是否允许这样做?
【问题讨论】:
-
听起来你可以回避整个问题,方法是使字段成为非常量并简单地通过构造函数提供值,最终得到一个类的 2 个实例而不是 2 个类。
-
通过在超类中抽象化字段,您可以明确每个子类都必须具有该字段,因此这与非抽象字段没有什么不同。
-
@peter,我不确定我是否遵循您的观点。如果在抽象类中指定了非抽象常量,那么它的值在所有子类中也是常量。如果它是抽象的,那么它的值将必须由每个子类实现/提供。所以,根本就不一样。
-
@liltitus27 我认为我在 3.5 年前的观点是,拥有抽象字段不会有太大变化,除非打破了将界面用户与实现分离的整个想法。
-
这会很有帮助,因为它可以允许子类中的自定义字段注释
标签: java methods field abstract