为什么 Java 类不能像抽象方法那样具有抽象字段?
例如:我有两个扩展同一个抽象基类的类。这两个类每个都有一个相同的方法,除了 String 常量,这恰好是它们内部的错误消息。如果字段可以是抽象的,我可以使这个常量抽象并将该方法拉入基类。相反,我必须创建一个抽象方法,称为 getErrMsg()
在这种情况下,它返回字符串,在两个派生类中重写这个方法,然后我可以提取方法(现在调用抽象方法)。
为什么我不能一开始就将字段抽象化? Java 可以被设计成允许这样做吗?
原文由 Paul Reiners 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以通过在抽象类中有一个在其构造函数中初始化的 final 字段(未经测试的代码)来执行您所描述的操作:
如果您的子类“忘记”通过超级构造函数初始化 final,编译器将发出警告错误,就像未实现抽象方法一样。