gpt4 book ai didi

java - 绕过Java中的多重继承

转载 作者:太空狗 更新时间:2023-10-29 16:23:18 26 4
gpt4 key购买 nike

我认为我的继承问题有解决方案,但我找不到。

我正在开发一个 Android 应用程序(目标是 Android 2.1),它在大多数页面上重复使用 SlidingDrawer(用于我的菜单)。为了避免在所有 Activity 上初始化它,我创建了一个 DefaultActivity 来这样做。它运行良好,直到我不得不扩展 TabActivity,因为 Java 不支持多重继承。

基本上我有以下默认 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
}
}

现在,当我有一项 Activity 时,我会执行以下操作

public class SomeActivity extends DefaultActivity{ 
// Declarations

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.myLayout);
super.initializeMenu();
}
}

但是我有一个扩展 TabActivity 的 View ,所以我不能这样做

public class SomeOtherActivity extends TabActivity, DefaultActivity

我怎样才能只扩展一个类,但其中包含 ActivityTabActivity 的代码?

谢谢。

最佳答案

我会为 DefaultActivity 使用组合而不是继承。

创建一个类 ActivityHelper 来完成 DefaultActivty 所做的一切。然后你的 Activity 都有一个 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)
}
}

它的代码有点多,但更灵活。这仅在您的 DefaultActivity 不依赖于 Activity 中的 protected 方法时才有效。

关于java - 绕过Java中的多重继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9081818/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com