如果我扩展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
最终阻止人们覆盖它。
现在,如果用户忘记添加该超级语句,我的代码就不会运行了。有没有办法强制扩展MyActivity的类的实例在与我在父类中定义的方法重叠的方法中运行super。
答案 0 :(得分:2)
如果后来的程序员选择不致电super
那么这就是他们的决定,他们将失去继承你班级的好处。据我所知,没有办法保证super
被召唤或以任何方式迫使他们称呼它。
答案 1 :(得分:1)
据我所知,你不能强制调用super方法。
但是,您可以通过这种方式开发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