我正在阅读 J. Bloch 的《Effective Java》,现在正在设计继承部分的类。他描述了所谓的自用模式,据我所知,我们不能在其他可重写方法中使用可重写方法。
所以我的问题是如何让客户意识到 self 使用。我们是否应该像这样在 Javadocs
中明确提及它:
/**
* This class is self-use, thus it cannot be inherited.
*/
或者我们甚至应该拒绝自用
的诱惑。
示例代码: 我们应该像我上面描述的那样记录该类还是必须避免这种自用?
public class MyClass{
public void overrideMe(){
//something
ovMe();
}
public void ovMe(){
//some staff
}
}
最佳答案
正如您所说,自用是指一个可重写方法调用另一个可重写方法。例如,当 AbstractList.addAll
调用AbstractList.add
。
确保扩展该类的任何人都知道这一点很重要。想象一下,您正在编写一个基于 AbstractList
的新列表实现 - 您需要知道是否需要重写 addAll
和 add
,或者是否需要重写只需要重写add
即可。
自用就好。 Joshua Bloch 所说的是,如果您使用它,则必须确保扩展该类的任何人都知道它。
有多种方法可以满足此建议:
- 您可以简单地避免自用。
- 您可以将涉及的方法之一设置为
final
,这样它就无法被覆盖。 - 您可以将该类设为
final
,这样它就无法扩展。 - 您可以在Javadoc注释中描述该类的自用模式(满足让其他人知道的要求)。
此外,为了避免可能的混淆,请注意Java 语言本身并不关心自用模式。编译器、JVM 或任何其他软件也不会。此建议纯粹是为了帮助可能使用您的代码的程序员(包括 6 个月后的您)。
关于java - 设计继承类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31110324/