Sne*_*ods 7 java recursion subclass mainclass
例:
class MainClass {
public doIt() {
...
else doIt();
}
}
class SubClass extends MainClass {
@Override
public doIt() {
super.doIt();
...
}
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是:
这是非常奇怪的行为,编程问题!我试图用this.doIt()调用递归,但这没有帮助.有人有想法吗?
非常感谢您的回答,这个问题已经解决了.
这是假设的行为,通过不设置方法final,这意味着它可以是overriden,所以你必须始终考虑到有人可以做到这一点.对该方法的调用永远不会保证是该级别的方法.
但是,您可以使用(protected)final方法优雅地解决此问题:
class MainClass {
protected final void innerDoIt () { //final: so no @Override
...
else innerDoIt();
}
public void doIt() {
innerDoIt();
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
class SubClass extends MainClass {
@Override
public doIt() {
super.doIt();
...
}
}
Run Code Online (Sandbox Code Playgroud)
final确保,该方法不能被覆盖.所以在那一刻,你有一个合同(保证),innerDoIt方法确实是innerDoIt你认为的方法.
因此,如果您不希望调用者被覆盖,只需将其对冲为另一种final方法即可.通过制作它protected,该方法也可以被调用SubClass.
| 归档时间: |
|
| 查看次数: |
707 次 |
| 最近记录: |