用这个。或超级。调用存在于超类和子类中的方法时

时间:2013-03-05 15:52:00

标签: java oop inheritance reference this

有一个名为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中重写。

提前致谢。

4 个答案:

答案 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会使代码更清晰,你在超类中调用一个方法。