覆盖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%肯定). 使用相同的方法签名显然不是一个好主意,因为稍后查看它的人可能会非常困惑,并且它肯定无法明确表达您的意图. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |