是否有扩展/覆盖私有类/方法的替代方法?

时间:2014-07-28 20:05:06

标签: java android

我想自定义在Android中绘制CalendarView的方式。以下是CalendarView.java在AOSP源代码中的外观:

public class CalendarView extends FrameLayout{
  private class WeekView extends View{
    protected void onDraw(..){
        drawBackground(..);
        drawWeekNumbersAndDates(..);
        drawWeekSeparators(..);
        drawSelectedDateVerticalBars(..);
    }
    private void drawBackground(..){..}
    private void drawWeekNumbersAndDates(..){..}
    private void drawWeekSeparators(..){..}
    private void drawSelectedDateVerticalBars(..){..}
  }
}

由于相关位被声明为私有,我不能只扩展/覆盖它们(或者我可以吗?)。复制整个源文件然后进行更改可能会有问题,因为该文件是我不拥有的包(android.widget)的一部分。

1 个答案:

答案 0 :(得分:4)

标准首要任务绝对不可能。私有成员甚至没有继承所以在子类中“覆盖”它们的概念没有任何意义。

在你的情况下,作家决定将这个课堂私有化。它可能不方便您的特定目的,但由于公共图书馆中可公开访问的所有内容自动成为其API的一部分,绑定其作者以保持其向后兼容性,因此制作任何特定代码都不是轻松的决定上市。作家们决定不采取这一步骤。

因此,在这种情况下,通过复制粘贴(如果可行)重用可能是实现目标的适当方法。这样做时要注意尊重图书馆许可证的条款。