【发布时间】:2012-10-12 20:31:55
【问题描述】:
假设我在 Java 类中有一个方法,并且我不希望该类的任何子类能够覆盖该方法。我可以这样做吗?
【问题讨论】:
标签: java class methods subclass
假设我在 Java 类中有一个方法,并且我不希望该类的任何子类能够覆盖该方法。我可以这样做吗?
【问题讨论】:
标签: java class methods subclass
您可以将方法声明为final,如:
public final String getId() {
...
}
更多信息请见http://docs.oracle.com/javase/tutorial/java/IandI/final.html
【讨论】:
@Component 出现问题:子类是继承自非组件父类的 @Component,并且该父类至少有一个 final 方法。此方法不会被包装到代理对象中,并且在处理本应使用非空值初始化的属性时可能会引发异常,因此您可能会得到 NullPointerException。
只需将方法设为 final。
【讨论】:
如果您的方法不是您构建的 API 的一部分并且不被子类直接调用,则更愿意简单地将您的方法设为 private。
如果您的类层次结构包含在单个包中,请将您的方法置于包范围内(没有范围关键字)。因此,只有外部世界(包括您自己的其他包)无法访问它,因此无法覆盖它。
如果您的方法实际上不是 API 的一部分,但必须由子类甚至外部可见,最好将其设为 protected 和 final
最后,如果您的方法是 API 的一部分,请将其设为 public 和 final。
【讨论】: