有没有理由从超类调用方法?
我遇到了许多调用super
方法而不是this
方法的地方,例如:
public String getCustomValue() {
String value = (String) super.getValue(someArgHere);
return value;
}
有什么好处?我只看到继承的一个主要问题:如果我在此类或其中一个后代getValue
中覆盖getCustomValue
,则会忽略该覆盖并调用super
方法。
答案 0 :(得分:2)
super.getValue(someArgHere)
调用超类的getValue
方法。相反,this.getValue(someArgHere)
调用当前类的getValue
方法(如果已定义)。如果当前类没有覆盖getValue
,则调用超类方法。
答案 1 :(得分:2)
除非你覆盖方法getValue(...)
并且非常确定(你的确定值得在代码中发表评论)你想绕过它,否则你不应该使用super
之类的你在干嘛如果您或其他人决定覆盖getValue(...)
,他们可能希望效果也适用于getCustomValue()
。
虽然您绝对可以从super.myMethodOne()
拨打myMethodTwo()
,但通常的情况是,当您覆盖super.myMethodOne()
时,要覆盖myMethodOne()
。像Ruby这样的语言甚至会自动为你传递方法参数,这样你就不必重新输入它们了。
以下是一个例子:
public class A {
public void close() {
// do a bunch of things...
}
}
public class B extends A {
@Override
public void close() {
// close things related to the subclass B
// and then make sure A is closed as usual...
super.close();
}
}
答案 2 :(得分:1)
在未覆盖方法的情况下,使用super
优于this
没有技术优势。
但是,有人可能会说使用super
而不是this
更清楚,因为您刚刚提到过。如果覆盖子类中的函数,则需要使用super
;如果你不这样做,可以使用this
。而不是玩猜谜游戏(或强迫人们检查方法是否被覆盖),你可以总是使用super
,而不是super
。
答案 3 :(得分:1)
我只看到继承的一个主要问题:如果我在此类中覆盖
getValue
或在其中一个后代中getCustomValue
将忽略该覆盖并调用super方法。
然后不要明确调用super
方法,只需调用getValue
即可。如果方法尚未被覆盖,则默认为超级方法。如果有,它将使用overriden方法。
我不知道在这种情况下询问“好处”是否合适 - 这实际上取决于你究竟想要完成什么。
答案 4 :(得分:0)
事情就是设计。当我们编码时,我们按照它是什么做的!
所以即使getValue
被扩展,它也是完美的,因为这是你的班级想要做的。
通常情况下,super
用于从super type
获取任何信息或数据或副作用,并根据您当前的类功能修改或改进它
答案 5 :(得分:0)
唯一的好处是,如果您的类重写了超类的方法,您仍然可以使用super
调用超类的方法。