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

覆盖Java中的私有final方法

发布时间:2020-12-15 04:56:58 所属栏目:Java 来源:网络整理
导读:class X1{ private final void show() { ... }}class X2 extends X1{ private final void show() { ... }} 问题1 代码正在编译而没有任何错误.由于final关键字会阻止方法被覆盖,为什么代码会编译? 问题2 如果我从两个show方法中删除private关键字,代码将无
class X1
{
    private final void show() { ... }
}

class X2 extends X1
{
    private final void show() { ... }
}

问题1

代码正在编译而没有任何错误.由于final关键字会阻止方法被覆盖,为什么代码会编译?

问题2

如果我从两个show方法中删除private关键字,代码将无法按预期编译.为什么?

解决方法

在X2中,方法不是同一种方法,它在X1中隐藏了方法.由于X1中的方法是私有的,因此X2不知道它,因此能够重用方法签名.所以,当你有一个X2对象而你调用show时,它将使用X2的节目.如果你有一个X1对象,它将使用X1的节目.

如果你在X2上使用@Override注释,它会发出警告,表明要覆盖的方法不存在(或错误,不是100%肯定).

使用相同的方法签名显然不是一个好主意,因为稍后查看它的人可能会非常困惑,并且它肯定无法明确表达您的意图.

(编辑:李大同)

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

    推荐文章
      热点阅读