加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 04:11:03 所属栏目:Java 来源:网络整理
导读:A类有方法x() B类继承A并覆盖x() C类继承B并覆盖x() 我想创建一个类lib,它将扩展Activity类并覆盖处理Android中后退按钮的方法(以及更多方法).我希望开发人员像我一样扩展我的类并继续使用他的活动类,但要强制他调用方法的超级. 知道B类如何防止其x方法在运
> A类有方法x()
> B类继承A并覆盖x()
> C类继承B并覆盖x()

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

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

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

更新:

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

解决方法

OK,let me try to explain what I want to achieve – I want to make a
class lib that will extend Activity class and override the method that
handles the back button in Android (and more methods). I want the
developer to extend my class and keep using his activity class as
usual,but to enforce him to call the method’s super. If he won’t do
that,I’m in trouble.

一种解决方案是让你的方法最终,但让它调用你声明为抽象的第二种方法.然后让其他开发人员编写该抽象方法的实现.

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

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

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

protected abstract void doMethod();

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

protected void doMethod() {
    // do more stuff
}

然后你会像现在一样继续调用method(). (但请记住,这不会阻止其他人直接调用doMethod(),因此您仍需要清楚地记录API.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读