gpt4 book ai didi

java - 重写 Java 中的私有(private) final方法

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:35:21 24 4
gpt4 key购买 nike

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

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

问题一

代码正在编译,没有任何错误。既然 final 关键字防止方法被覆盖,为什么代码可以编译?

问题二

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

最佳答案

在X2中,方法不是同一个方法,它是X1中方法的影子。由于 X1 中的方法是私有(private)的,X2 不知道它,因此能够重用方法签名。因此,当您有一个 X2 对象并调用 show 时,它将使用 X2 的 show。当你有一个 X1 对象时,它将使用 X1 的显示。

如果你在 X2 上使用了@Override 注解,它会给出一个警告,指出要覆盖的方法不存在(或错误,不是 100% 确定)。

使用相同的方法签名显然不是一个好主意,因为稍后查看它的人可能会非常困惑,而且它绝对不能明确您的意图。

关于java - 重写 Java 中的私有(private) final方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9553010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com