0

Activity を拡張し、基本クラスにイベント ハンドラーを実装する場合 (OOP 用語が正しくない場合は申し訳ありません)、イベント ハンドラーが常に私の拡張クラスから実行されるようにするにはどうすればよいでしょうか。

public class MyActivity extends Activity{

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//Stuff that I need to do.
}

}//MyActivity class

public class MainActivity extends MyActivity{


protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   super.onActivityResult(requestCode, resultCode, data);
}

}//MainActivity class

その意図は、MyActivity が最終的に他のユーザーが使用するコード ライブラリになることです。私のクラスと、私のクラスを拡張する Activity のインスタンスの両方に、 の有効な用途があり onActivityResultます。私は明らかにonActivityResult 、人々がそれを上書きするのを止めるために final にすることはできません。

ユーザーがその super ステートメントを追加するのを忘れた場合、私のコードは実行されません。MyActivity を拡張するクラスのインスタンスを強制的に、親クラスで私が定義したメソッドと重複するメソッドでスーパーを実行する方法はありますか?

4

2 に答える 2

2

後のプログラマーが呼び出さないことを選択した場合、superそれは彼らの決定であり、クラスから継承する利点が失われます。私の知る限り、呼び出さsuperれることを保証する方法や、強制的に呼び出す方法はありません。

于 2012-07-12T15:38:58.790 に答える
1

私の知る限り、スーパーメソッドを強制的に呼び出すことはできません。

ただし、開発者がMyActivityをどのように使用すべきかを理解しやすくするような方法で、MyActivityを開発することができます。

親クラスであるMyActivityがインスタンス化されない場合は、抽象クラスにすることができます。

抽象クラスには、抽象メソッドを呼び出すことができるメソッドを含めることができます。

抽象メソッドは、それを拡張するクラスに実装する必要があります。

だからあなたは次のようなものを書くことができます

public abstract class MyActivity extends Activity{

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   //Stuff that I need to do.
   onMyActivityResult(requestCode, resultCode, data);
}

public abstract void onMyActivityResult(int requestCode, int resultCode, Intent data);

}//MyActivity class

public class MainActivity extends MyActivity{

@Override
public void onMyActivityResult(int requestCode, int resultCode, Intent data) {
}

}//MainActivity class
于 2012-07-12T16:17:56.307 に答える