我认为这不是一个非常有用的问题,但我认为有人可以说smth批评。
public class Base{
public void boo(){}
}
public class Derivative extends Base{
1:public void useBoo(){
boo();
}
2:public void useBoo(){
this.boo();
}
3:public void useBoo(){
super.boo();
}
}
[编辑]
我之所以提出这个问题的原因是:避免将来重新编译或命名混淆。并使代码具有更高的可读性和灵活性,以适应未来的变化。
答案 0 :(得分:2)
最好用的是你觉得最清楚的。
顺便说一句:如果你向Derived添加boo
方法,第一个例子的行为将与第三个例子不同。
答案 1 :(得分:2)
如果你想确保调用的方法是超类方法,一定要使用super:
super.boo();
如果要使用当前类中定义的方法,如果不存在,请使用super方法:
this.boo();
//or
boo();
就个人而言,在第二种情况下,如果类是层次结构的一部分,我更喜欢显式使用this.boo(),因为读取代码更清楚,以了解该方法的位置。但这是我的意见。
答案 2 :(得分:1)
使用前两个中的一个,除非您明确要限制对超类实现的调用。
当覆盖超类方法,并希望包含超类方法的行为时,请使用第三种方法。
在其他地方,如果你使用第三个,后来你或其他人覆盖了boo()的超类实现 - 在这个类或子类中 - 那么useBoo()将不会使用覆盖。除了覆盖boo()本身之外,这通常是不可取的。
示例:
/** Extends boo method. */
public void boo(){
super.boo(); // Good: you explicitly want to call the superclass method, not call this method again.
}
public void doSomethingThatInvolvesBoo() {
boo(); // Good -- will call this object's implementation,
// even if this is a subclass, even if there are code changes later.
this.boo(); // Good (and equivalent to simply calling boo()).
super.boo(): // Usually bad.
}
答案 3 :(得分:1)
我只会使用1和2(在我的情况下,我更喜欢2,我喜欢明确我的意图)
public void useBoo(){
this.boo();
}
我不会使用3,因为它在语义上意味着其他东西,请记住Derivative
也可以扩展,boo()
可以在类层次结构中进一步覆盖,除非你特别想要调用Base.boo()
您不应使用super
关键字。
答案 4 :(得分:0)
有没有什么能阻止你调用boo()?或者你在自己的代码中覆盖它? 1和2做同样的事情,3调用Base的方法。
编辑:正如Simeon所说,使用super会很清楚你是从Base类调用该方法。
答案 5 :(得分:0)
考虑到可读性super
可能是最好的,因为它说这里我正在调用超类的方法。
虽然有了this
,你可能会想知道'这个方法到底是什么地方..哦,确定它在超级课程中'