3

有一个名为 Champion 的类,它有一个 Skill 数组作为实例变量。

它实现了一个名为“public final Skill[] getSkills()”的方法,其中 Skill[] 是另一个名为 Skill 的对象的数组。

有一个名为 Support 的子类实现了一个名为“public final boolean canHeal()”的方法,该方法检查方法 canHeal 中的技能数组。

我应该写“Skill[] x = this.getSkills()”还是:Skill[] x = super.getSkills()”来获取 Skill 数组,为什么?

请记住,getSkills 方法仅在 Champion 类中定义,在 Support 类中没有被覆盖。

提前致谢。

4

4 回答 4

3

super关键字允许您调用您的类覆盖或隐藏的方法的基类版本。

如果你的类没有单独的getSkills()方法,super将没有效果。

于 2013-03-05T15:55:08.137 回答
2

我认为最好在没有super.

首先 - 现在有区别。将来,如果您在课堂上重写此函数,将很难发现(或至少需要注意)。

如果您覆盖您的函数,您可能希望在super.getSkills()其中调用。

于 2013-03-05T15:57:33.963 回答
0

你都不应该这样做。添加this.只是多余的,super.如果将来您覆盖,添加可能会破坏您的课程getSkills()。所以就这样做:

Skill[] x = getSkills();

在当前情况下它只会调用超类中定义的方法,如果将来你有理由重写getSkills()(例如因为你的类使用了不同的方式,或者有额外的条件),它将被自动使用;这比继续调用超类方法更有可能是正确的行为。

一般来说,super.someMethod()如果需要,您应该只在被覆盖的方法内部调用(例如,不重复某些逻辑或副作用)。仅当您确定不想要自己的实现,而是您的超类的实现时,才应该在另一种方法中使用它。

于 2013-03-05T16:06:19.510 回答
-1

我认为您可以使用任何一种,因为 Support 是冠军,但使用 super.getSkills 会使代码更清楚地表明您正在调用超类中的方法。

于 2013-03-05T15:55:53.003 回答