在Java中绕过多重继承 [英] Bypass multiple inheritance in Java

查看:108
本文介绍了在Java中绕过多重继承的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我认为有我的继承权问题的解决办法,但我不能找到它。

I think that there's a solution to my inheritance problem but I can't find it.

我开发上大部分的网页的Andr​​oid应用程序(目标是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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆