Java继承 - 兄弟的重写方法问题

时间:2015-12-11 03:07:21

标签: java android inheritance interface override

我有4个类,1个父类和2个继承子(兄弟姐妹),以及一个接口(服务回调,它通过Android开发完成的方式,每一组时间(例如每5秒)执行一次操作)。

发布3个类,不包括界面以减少一些代码

父类,BaseActivity.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,ChildActivity_A.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
     }
 }

正如您在上面看到的那样(后台服务正在做什么)Child_A的具体方法(每次回调发生时实现都会起作用

现在这就变得棘手了(在我看来) 这是第三类

继承子ChildActivity_B.java

{{1}}

如果我从ChildActivity_B调用startBackgroundService,则不会调用ChildActivity_A上的具体实现

我在android开发之前一直在做java程序,把事情视为理所当然,我想我错过了一些关于继承的事情让我在这种情况下感到困惑。

我只需要对它为什么会发生一些启示,(顺便说一句,我通过在自定义Application类中设置静态标志来解决实际问题,以便在活动中启动服务)

1 个答案:

答案 0 :(得分:1)

在您的代码中,"BaseActivity.this.startBackgroundService()"实际上是启动后台服务,可在BaseActivity.java中找到。在ChildActivity_B super.onCreate(savedInstanceState);中,您BaseActivity.java正在调用它。因此,它只会调用它的超级方法,该方法可以在其超级ChildActivity_A中使用,而不是ChildActivity_BChildActivity_A实际上并不了解{{1}}。