1

我在阅读“你好,Android”时发现了一个问题。

当他在 Activity 中实现 onCreate() 时,它看起来像:

{
超级.onCreate(..);
...
...
}

但 onSizeChanged() 看起来像:

{
...
...
super.onSizeChange();
}

而且他没有在 onDraw() 中调用 super。

我应该把超级调用语句放在哪里?我在哪里可以在 android 的文档中找到答案?

4

2 回答 2

2

在子类中的任何重写方法中, super.methodname() 的位置通常是该方法中的第一件事,(如 in onCreate())。但是,有时您需要在调用 super 之前执行其他步骤,因此您可以像在onSizeChanged()方法中那样执行此操作。超级调用是由这个标准决定的,而不是由任何其他规则决定的。

于 2011-04-14T01:59:03.997 回答
2

在很多情况下,当您考虑覆盖的功能在总体方案中出现的位置时,这个问题的有用答案就会出现。

如果您正在调用一些充当初始化程序的东西,那么super调用应该(通常)在开始时出现,因为您希望在尝试初始化子类之前初始化基类。

如果你调用的东西表现为清理例程,那么super调用应该(通常)在最后,因为你想在超类清理自己之前清理你的所有部分。

对于在任意时间到来的呼叫,这将取决于您覆盖的呼叫的性质。如果你想在框架进行计算之前做一些事情,以便你可以影响它们的结果,你会希望在super最后调用。如果您想基于超类的计算进行计算,您的super调用应该在开头。

简而言之,这没有固定的规则:它取决于您要覆盖的特定方法的功能。

于 2011-04-14T02:05:12.750 回答