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
}
}
Run Code Online (Sandbox Code Playgroud)
我不需要更改最终方法的实现,我只是想为它更改Javadoc.
简单地说:你做不到.如果有的话,你可以在该子类的定义中加入一些javadoc来解释那个最终方法的行为已被改变.如果你能做到这一点 - 你可以改变基类上的javadoc 来说:"子类可能使这个方法无效"或类似的东西.
除此之外,你应该明白,这也是一个值得商榷的想法构思明智的.
继承主要不是代码重用.它是关于表达一些类A 是 -B,因为A扩展B.所以当你决定使一个方法在子类上没有意义时,你基本上使超类的合同无效.这根本不是好的做法(请参阅Liskov替换原则,了解为什么在修改继承方法的合同时必须小心).
你看,关键字final不仅是编译器的信息.它也表达了将其用于该方法的人的意图.这个人说:"我不希望这个子类使用这种方法发脾气!"