Java 继承问题
我正在为android创建一个自定义布局。 布局实现完全相同,但我需要从RelativeLayout扩展一次,从LinearLayout扩展一次Java 继承问题,java,android,oop,inheritance,Java,Android,Oop,Inheritance,我正在为android创建一个自定义布局。 布局实现完全相同,但我需要从RelativeLayout扩展一次,从LinearLayout扩展一次 class Layout1 extends LinearLayout { // methods and fields } class Layout2 extends RelativeLayout { // the same EXACT methods and fields } 如何使用继承来避免代码复制并实现我的方法一次。 我不知道它是否适合您的用
class Layout1 extends LinearLayout {
// methods and fields
}
class Layout2 extends RelativeLayout {
// the same EXACT methods and fields
}
如何使用继承来避免代码复制并实现我的方法一次。
我不知道它是否适合您的用例,但您可以考虑通过添加“其他”类的字段来使用委托。我很悲观,因为这些课程的关系太密切了。你可以使用作文和类似“策略”的模式: 您甚至可以在运行时更改
策略
这样,您的YourLayout
类可以同时使用这两种场景 我使用了委托,尽管有点不同。类中唯一的重载方法是重载的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
}
虽然我还有两个扩展的类,但我不会复制之前复制过的代码,这正是我想要实现的。我不认为你想避免DRY…@Jason是的,你是对的,如果这对于你来说太复杂了,我建议实现一个包含所有常见行为的抽象视图组,然后让两个布局使用它们的特定行为扩展抽象视图组。
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
}