有一个名为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中重写。
提前致谢。
答案 0 :(得分:3)
super
关键字允许您调用基类'您的类覆盖或隐藏的方法的版本。
如果您的课程没有单独的getSkills()
方法,则super
将无效。
答案 1 :(得分:2)
我认为最好在没有super
的情况下调用该函数。
首先 - 目前现在存在差异。 将来,如果你在课堂上重写这个功能,很难发现(或者至少需要注意)。
如果您覆盖了您的功能,您可能需要在其中调用super.getSkills()
。
答案 2 :(得分:0)
你不应该这样做。添加this.
只是多余的,如果将来覆盖super.
,添加getSkills()
很可能会破坏您的课程。所以就这样做:
Skill[] x = getSkills();
在当前情况下,它将简单地调用超类中定义的方法,如果将来您有理由覆盖getSkills()
(例如,因为您的类使用不同的方式,或具有其他条件),它将自动使用;这比继续调用超类方法更可能是正确的行为。
一般情况下,如果需要,只应在重写方法中调用super.someMethod()
(例如,不重复某些逻辑或副作用)。只有在您确定不需要自己的实现时,才应该在另一种方法中使用它,而不是超类的实现。
答案 3 :(得分:-1)
我认为你可以使用,因为支持是冠军,但使用super.getSkills会使代码更清晰,你在超类中调用一个方法。