在Java中阻止运行时的方法覆盖

Ron*_*ler 3 java android

  • A类有方法x()
  • B类继承A并覆盖x()
  • C类继承B并覆盖x()

我想创建一个类lib,它将扩展Activity类并覆盖处理Android中后退按钮的方法(以及更多方法).我希望开发人员像我一样扩展我的类并继续使用他的活动类,但要强制他调用方法的超级.

知道B类如何防止其x方法在运行时被覆盖?

(我不想在B级中完成x)

更新:

好的,让我试着解释一下我想要实现的目标 - 我想创建一个类lib,它将扩展Activity类并覆盖处理Android中后退按钮的方法(以及更多方法).我希望开发人员像我一样扩展我的类并继续使用他的活动类,但要强制他调用方法的超级.如果他不这样做,我就麻烦了.

rob*_*rob 6

好的,让我试着解释一下我想要实现的目标 - 我想创建一个类lib,它将扩展Activity类并覆盖处理Android中后退按钮的方法(以及更多方法).我希望开发人员像我一样扩展我的类并继续使用他的活动类,但要强制他调用方法的超级.如果他不这样做,我就麻烦了.

一种解决方案是制作您的方法final,但让它调用您声明为的第二种方法abstract.然后让其他开发人员编写该abstract方法的实现.

例如,您的代码可能如下所示:

public final void method() {
    // do your stuff
    // ...

    // call the method that the other developer wrote
    doMethod();
}

protected abstract void doMethod();
Run Code Online (Sandbox Code Playgroud)

无论谁添加必须在方法结束时调用的功能,那么必须实现抽象方法以扩展您的类并编译其代码:

protected void doMethod() {
    // do more stuff
}
Run Code Online (Sandbox Code Playgroud)

那你method()就像现在一样继续打电话.(但请记住,这并不妨碍其他人doMethod()直接打电话,因此您仍需要清楚地记录API.)