1. ホーム
  2. java

[解決済み] 派生クラスから強制的にスーパーメソッドを呼び出すには?(Androidのように)

2023-04-23 16:25:12

質問

疑問に思ったのですが、新しい Activity クラスを作成し onCreate() メソッドをオーバーライドすると、eclipseではいつも自動追加されます。 super.onCreate() . これはどのようにして起こるのでしょうか?抽象クラスまたは親クラスにこれを強制するJavaキーワードがあるのでしょうか?

スーパークラスを呼び出さないことが違法かどうかは分かりませんが、いくつかのメソッドでは、これを行わないために例外が投げられたことを覚えています。これもjavaに組み込まれているのでしょうか?それを行うために何らかのキーワードを使用することができますか?またはそれはどのように行われるのですか?

どのように解決するには?

以下は Activity#onCreate() - はほとんどコメントです ( オリジナル - ~800行目参照 ):

/**
 * Called when the activity is starting.  This is where most initialization
 * should go: calling {@link #setContentView(int)} to inflate the
 * activity's UI, using {@link #findViewById} to programmatically interact
 * with widgets in the UI, calling
 * {@link #managedQuery(android.net.Uri , String[], String, String[], String)} to retrieve
 * cursors for data being displayed, etc.
 *
 * <p>You can call {@link #finish} from within this function, in
 * which case onDestroy() will be immediately called without any of the rest
 * of the activity lifecycle ({@link #onStart}, {@link #onResume},
 * {@link #onPause}, etc) executing.
 *
 * <p><em>Derived classes must call through to the super class's
 * implementation of this method.  If they do not, an exception will be
 * thrown.</em></p>
 *
 * @param savedInstanceState If the activity is being re-initialized after
 *     previously being shut down then this Bundle contains the data it most
 *     recently supplied in {@link #onSaveInstanceState}.  <b><i>Note: Otherwise it is null.</i></b>
 *
 * @see #onStart
 * @see #onSaveInstanceState
 * @see #onRestoreInstanceState
 * @see #onPostCreate
 */
protected void onCreate(Bundle savedInstanceState) {
    mVisibleFromClient = !mWindow.getWindowStyle().getBoolean(
            com.android.internal.R.styleable.Window_windowNoDisplay, false);
    mCalled = true;
}

というわけで、推測するに、ADT Eclipse プラグインは、この呼び出しを super.onCreate() への呼び出しを自動追加しているのだと思います。これは完全な推測ですが。