Java 继承 - sibling 的重写方法问题

标签 java android inheritance interface overriding

我有 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_AChildActivity_B 实际上对 ChildActivity_A 一无所知。

关于Java 继承 - sibling 的重写方法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34215459/

相关文章:

java - 如何检查 Fragment.onAttach() 内的类型化回调类型

java - Spring Boot 隐式使用 Spring IO?

java - 优化 Blade

带有接口(interface)对象的 C++ 模板

android - android中的数据库空指针异常

java - 使用 T 类扩展 ArrayList<T> 的方法

c++ - 继承对Base类私有(private)数据成员的访问(在Derived类中继承Base类成员函数)

java - 如何找到用户输入的两个输入的公共(public)后缀?

java 检查Skypename是否存在

android - 将json依赖添加到android studio中的库模块