首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >继承问题/问题

继承问题/问题
EN

Stack Overflow用户
提问于 2010-06-06 02:04:32
回答 3查看 113关注 0票数 0

我正在为android创建一个自定义布局。布局实现是完全相同的,只是一次我需要从RelativeLayout扩展,一次我需要从LinearLayout扩展。

代码语言:javascript
复制
class Layout1 extends LinearLayout {
// methods and fields
}

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-06 02:08:53

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

但我很悲观,因为这些类的关系太密切了。

票数 0
EN

Stack Overflow用户

发布于 2010-06-06 02:14:19

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

代码语言:javascript
复制
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类就可以同时使用这两种场景。

票数 2
EN

Stack Overflow用户

发布于 2010-06-10 04:17:13

我使用了委托,尽管有点不同。我的类中唯一的重载方法是一个重载的dispatchDraw。所以我把它移到了一个不同的类中,并在每个扩展的类中都包含了它的一个实例。

代码语言:javascript
复制
 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
 }

虽然我仍然有两个扩展的类,但我不会复制之前复制的代码,这是我想要实现的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2981451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档