在Java中绕过多重继承 [英] Bypass multiple inheritance in Java
问题描述
我认为有我的继承权问题的解决办法,但我不能找到它。
I think that there's a solution to my inheritance problem but I can't find it.
我开发上大部分的网页的Android应用程序(目标是Android 2.1的),它重用 SlidingDrawer
(我的菜单)。为了避免初始化它所有的活动我创建了一个 DefaultActivity
这样做。它的工作很好,直到我不得不延长 TabActivity
因为Java不支持多重继承。
I'm developing an Android application (target is Android 2.1) which reuses a SlidingDrawer
(for my menu) on most of the pages. In order to avoid to initialize it on all the Activity I created a DefaultActivity
to do so. It worked well until I had to extends TabActivity
because Java doesn't support multiple inheritance.
基本上我有以下的预设活动
Basically I have the following Default activity
public class DefaultActivity extends Activity{
// Declarations
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Some code
}
@Override
protected void onPause() {
// Some code
}
protected void initializeMenu() {
// Init
}
}
现在,当我有一个活动我这样做以下
Now when I have an activity I do the following
public class SomeActivity extends DefaultActivity{
// Declarations
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myLayout);
super.initializeMenu();
}
}
但我有延伸的景色 TabActivity
,所以我不能做。
public class SomeOtherActivity extends TabActivity, DefaultActivity
我怎么可以做只有一个类延伸,但其中包含了code为活动
和 TabActivity
感谢。
推荐答案
我会用成分,而不是继承DefaultActivity。
I would use composition instead of inheritance for DefaultActivity.
创建一个类ActivityHelper它做一切DefaultActivty一样。那么你的活动都有类型ActivityHelper的成员变量。
Create a class ActivityHelper which does everything DefaultActivty does. Then your activities all have a member variable of type ActivityHelper.
public class ActivityHelper {
// Declarations
@Override
public boolean onCreateOptionsMenu(Activity activity, Menu menu) {
// Some code
}
@Override
protected void onPause(activity) {
// Some code
}
protected void initializeMenu(activity) {
// Init
}
}
public class MyActivity extends Activity {
private final ActivityHelper helper;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
helper.onCreateOptionsMenu(this, menu)
}
@Override
protected void onPause() {
helper.onPause(this);
}
protected void initializeMenu() {
helper.initializeMenu(this)
}
}
这是一个多一点code,但更灵活。这,如果你的DefaultActivity不依赖于活动的保护方法才有效。
It's a little more code, but much more flexible. This will only work if your DefaultActivity does not rely on protected methods in Activity.
这篇关于在Java中绕过多重继承的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!