【发布时间】:2016-03-16 21:20:49
【问题描述】:
我有 4 个类,1 个父类和 2 个继承子类(兄弟姐妹),以及一个接口(服务回调,每组时间(例如每 5 秒)执行一次操作,顺便说一下,这是从 Android 开发完成的。
我把除去接口的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
}
}
继承的 Child,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 程序,认为事情是理所当然的,我想我错过了一些关于继承的事情,这让我在这种情况下感到困惑。
我只需要一些关于为什么会发生的启发,(顺便说一下,我通过在自定义应用程序类中设置静态标志来启动服务或不在活动中解决真正的问题)
【问题讨论】:
-
我在这里错过了一个测试,我尝试在 ChildActivity_A 上调用 super.startBackgroundService(),并且覆盖的方法有效。现在这就是我所理解的.. 有什么叫做 “隐式方法覆盖?” 这就是为什么当我在 ChildActivity_B上调用 super.startBackgroundService() 时>, onBackgroundServiceCallback() 的 ChildActivity_A 的 实现 NOT 被调用,因为在 ChildActivity_B 中存在**“IMPLICIT”** 或隐藏覆盖?
标签: java android inheritance interface overriding