Я использовал делегирование, хотя и несколько иначе. Единственный перегруженный метод в моем классе - это перегруженный 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
}
Хотя у меня все еще есть два класса, которые расширяются, но я не дублирую код, который дублировался до того, чего я и хотел достичь.