![](/img/trans.png)
[英]Using “super” keyword or using a superclass instance when calling superclass methods locally in a method from subclass?
[英]Using this. or super. when calling a method that exist in a superclass and a subclass
有一个名为Champion的类,它有一个Skill数组作为实例变量。
它实现了一个名为“public final Skill [] getSkills()”的方法,其中Skill []是另一个名为Skill的对象的数组。
有一个名为Support的子类实现了一个名为“public final boolean canHeal()”的方法,它检查方法canHeal中的技能数组。
我应该写“Skill [] x = this.getSkills()”或:Skill [] x = super.getSkills()“来获取技能数组以及为什么?
请记住,方法getSkills仅在类Champion中定义,而不在类Support中重写。
提前致谢。
super
关键字允许您调用类重写或镜像的方法的基类版本。
如果你的类没有单独的getSkills()
方法,那么super
将没有任何效果。
我认为最好在没有super
情况下调用该函数。
首先 - 目前现在存在差异。 将来,如果你在课堂上重写这个功能,很难发现(或者至少需要注意)。
如果你覆盖你的函数,你可能想在其中调用super.getSkills()
。
你不应该这样做。 添加this.
是多余的,加入super.
如果在将来你覆盖getSkills()
可能会破坏你的课程。 所以这样做:
Skill[] x = getSkills();
在当前情况下,它将简单地调用超类中定义的方法,如果将来您有理由覆盖getSkills()
(例如,因为您的类使用不同的方式,或具有其他条件),它将自动使用; 这比继续调用超类方法更可能是正确的行为。
通常,如果需要,只应在重写方法中调用super.someMethod()
(例如,不要复制某些逻辑或副作用)。 只有在确定不需要自己的实现时,才应该在另一种方法中使用它,而不是超类的实现。
我认为你可以使用,因为支持是冠军,但使用super.getSkills会使代码更清晰,你在超类中调用一个方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.