Bri*_*ian 10 java methods overriding super
如果我public void send() { /* some code */ }在类中有方法并且让这个类的子类也有一个方法public void send() { /* some code*/ },我如何确保子句必须在它试图覆盖的send()方法中的某处调用super.send()?
我想知道这个,因为我已经用API写了,如果你在覆盖它时不调用那个方法的超级,它会抛出一个异常告诉我,我没有调用超级方法.这是硬编码还是可以用Java中的一些关键字来完成?
Tom*_*Tom 18
你不能真的,但你可以......
class MySuperClass {
public final void send() {
preSend();
// do the work...
postSend();
}
protected void preSend() {
// to be overridden in by sub classes
}
protected void postSend() {
// to be overridden in by sub classes
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过添加抽象方法来实现此目的(不要看另一种方法):
abstract class MyClass
{
public final void send() // forbid changing this.
{
// do something
doSend():
}
protected abstract doSend(); // no external calls
}
Run Code Online (Sandbox Code Playgroud)
http://en.wikipedia.org/wiki/Call_super
你要做的是反模式; 你可以做到(许多Java核心类都可以),但你不应该 - 除非你有充分的理由.
除此之外,此处提供的所有答案都是正确的.
| 归档时间: |
|
| 查看次数: |
7016 次 |
| 最近记录: |