继承问题/问题

时间:2010-06-05 18:04:32

标签: java android oop inheritance

我正在为Android创建自定义布局。 布局实现完全相同,但一旦我需要从RelativeLayout扩展,一次从LinearLayout扩展。

class Layout1 extends LinearLayout {
// methods and fields
}

class Layout2 extends RelativeLayout {
// the same EXACT methods and fields
}

如何使用继承来避免代码重复并实现我的方法一次。

3 个答案:

答案 0 :(得分:2)

你可以使用合成和类似“策略”模式的东西:

class YourLayout extends ViewGroup {
    ViewGroup strategy;
    public YourLayout( Condition someCondition ) {
       if( someCondition.useLinear() ) {
            strategy = new LinearLayout(); // or Layout1
       } else {
            strategy = new RelativeLayout();
       }
    }
    public View findFocus() {
        return strategy.findFocus();
    }
    .... rest of the methods:
    / rest of specific EXACT methods and fields
 }

您甚至可以在运行时更改strategy

这样,您的YourLayout类可能会使用这两种方案。

答案 1 :(得分:0)

我不知道它是否适合您的用例,但您可以考虑通过添加“其他”类的字段来使用委派。

我很悲观,因为课程关系太密切了。

答案 2 :(得分:0)

我使用代表团,虽然有点不同。我班上唯一重载的方法是重载dispatchDraw。所以我将它移动到另一个类,并在每个扩展的类中包含它的实例。

 class MyLinearLayout extends LinearLayout {
        MyDraw md = new MyDraw();

        @Override
        protected void dispatchDraw(Canvas canvas) {    
            md.draw(canvas);
            super.dispatchDraw(canvas);
        }
 }

 class MyRelativeLayout extends RelativeLayout {
      //    as above
 }

虽然我仍然有两个扩展的类,但我不会复制之前重复的代码。