如何覆盖 sub class 中最终方法的 javadoc?

How to override the javadoc for a final method in a sub class?

public class BaseClass {
    /**
     * Gets the value.
     */
    public final String getValue() {
        // returns something.
    }
}

public class SubClass extends BaseClass {
    /**
     * Gets the value.
     * <p/>
     * The value is meaningless for SubClass.
     */
    @Override // Cannot override final method
    public final String getValue() {
        super.getValue(); // Not overriding implementation, just javadoc
    }
}

我不需要更改final方法的实现,我只是想为它更改Javadoc。

Java 未预见到这一点,因此无法使用标准 Java 工具。不过,您 mya 在 class 级别提供了更详细的解释。

您也可以尝试查看 Javadoc API (Doclet API) 并搜索它的一些自定义实现或实现您自己的扩展,例如在 class 级别引入新注释,并实现自定义 Javadoc 生成器以遵守这些注释。我不知道这样的东西是否已经存在。

更新: 另见 ,他有一堆你不应该那样做的理由。

简单地说:你不能那样做。如果有的话,您可以在那个子 class 的定义中放置一些 javadoc 来解释那个最终方法的行为已经改变。如果你能做到这一点 - 你可以将 base class 上的 javadoc 更改为:"sub classes might invalidate this method" 或类似的东西。

除此之外,您应该明白这也是一个有问题的想法。

继承主要不是关于代码重用。它是关于表达一些 class A is-a B,因为 A extends B. 所以当你决定让一个方法 meaningless 在 subclass 上,你基本上是在使 superclass 的合同无效。这根本不是好的做法(请参阅 Liskov substitution principle 了解为什么在 修改 继承方法的契约时必须小心)。

你看,关键字 final 不仅是编译器的信息。它还表达了将它用于该方法的人的 意图 。这个人说:"I don't want that subclasses temper with this method!"