我有 4 个类,1 个父类和 2 个继承子类( sibling ),以及一个接口(interface)(服务回调,每组时间(例如每 5 秒)做一些事情,顺便说一句,这是从 Android 开发中完成的。
我把除接口(interface)之外的3个类贴出来减少一些代码
父类,BaseActivity.java
public class BaseActivity extends Activity implements BackgroundServiceCallback{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BaseActivity.this.startBackgroundService();
}
@Override
public void onBackgroundServiceCallback() {
// no concrete implementation (will be implemented in child_a)
}
public void startBackgroundService() {
// configure and start the service here
}
}
继承子项,ChildActivity_A.java
public class ChildActivity_A extends BaseActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// some activity configurations here.
}
@Override
public void onBackgroundServiceCallback() {
// concrete implementation goes here, and will work
}
}
正如您在上面看到的(后台服务正在做什么)Child_A 的具体方法(每次回调发生时都会执行
现在这就是它变得棘手的地方(在我看来) 这是第三节课
继承子 ChildActivity_B.java
public class ChildActivity_B extends BaseActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// some activity configurations here.
// if I call super.startBackgroundService() or this.startBackgroundService
// ChildActivity_A's implementation is not being called
}
}
如果我从 ChildActivity_B 调用 startBackgroundService,则不会调用 ChildActivity_A 的具体实现
在 android 开发之前我一直在做 java 程序,想当然,我想我错过了一些关于继承的事情,这让我在这种情况下感到困惑。
我只需要一些关于为什么会发生的启发,(顺便说一下,我通过在自定义应用程序类中设置静态标志来启动服务或不在 Activity 中解决真正的问题)
最佳答案
在您的代码中,"BaseActivity.this.startBackgroundService()"
实际上是启动后台服务,它在BaseActivity.java
中可用。在您的 ChildActivity_B
中,您通过 super.onCreate(savedInstanceState);
调用它。所以它只会调用它的 super 方法,它在它的父类(super class) BaseActivity.java
中可用,而不是 ChildActivity_A
。 ChildActivity_B
实际上对 ChildActivity_A
一无所知。
关于Java 继承 - sibling 的重写方法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34215459/