1

「Hello, Android」の読み方に問題があることに気付きました。

アクティビティに onCreate() を実装すると、次のようになります。

{
super.onCreate(..);
...
...
}

しかし、onSizeChanged() は次のようになります。

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

そして、彼は onDraw() で super を呼び出しません。

スーパーコールステートメントはどこに置くべきですか? Androidのドキュメントのどこで答えを見つけることができますか?

4

2 に答える 2

2

多くの場合、この質問に対する有用な答えは、オーバーライドされた機能が物事の壮大なスキームのどこで発生するかを考えるときに得られます。

イニシャライザとして動作するものを呼び出す場合はsuper、サブクラスを初期化する前に基本クラスを初期化する必要があるため、呼び出しは(通常は)最初に行う必要があります。

クリーンアップルーチンとして動作するものを呼び出す場合super、スーパークラスが自分自身をクリーンアップする前にすべてのピースをクリーンアップする必要があるため、呼び出しは(通常)最後に来る必要があります。

任意の時間に着信する呼び出しの場合、オーバーライドされた呼び出しの性質によって異なります。フレームワークが計算を行う前に何かを実行して、その結果に影響を与えることができるようにする場合はsuper、最後に呼び出しを行う必要があります。スーパークラスの計算に基づいて計算を行う場合は、super呼び出しが最初になります。

つまり、これには決まったルールはありません。オーバーライドする特定のメソッドの機能によって異なります。

于 2011-04-14T02:05:12.750 に答える
2

サブクラスのオーバーライドされたメソッドでは、通常、super.methodname() の場所はそのメソッドの最初のものです (のようにonCreate())。ただし、場合によっては、super を呼び出す前に追加の手順を実行する必要があるため、onSizeChanged()メソッドのようにこれを行います。スーパー コールは、他のルールではなく、この基準によって決定されます。

于 2011-04-14T01:59:03.997 に答える