gpt4 book ai didi

java - 重写父类(super class)中的私有(private)方法 - 有办法吗?

转载 作者:行者123 更新时间:2023-11-30 01:43:10 25 4
gpt4 key购买 nike

我知道,如果我想要做的事情是有意的,该方法将受到保护,而不是私有(private)的,但是我想创建自己的 PriorityQueue ,需要调用 siftUp多来几次。我无法编辑该字段的声明,因为 PriorityQueue 是 java 库的一部分,因此我正在寻找另一种调用它的方法。我唯一能做的就是从库中复制整个类并将其更改为我的需要吗?

最佳答案

不幸的是,没有办法重写父类(super class)的私有(private)方法。

根据Oracle's documentation on Controlling Access to Members of a Class ,私有(private)方法仅供类本身访问。

这是父类(super class)对子类的可见性表:

Superclass and subclass

Superclass's member visibility to subclass

我相信他们通过提供私有(private)可见性为开发人员提供了实现“最小权限”的原则,这样就无法在创建它的类之外的任何地方访问它。

如果您希望能够覆盖它,则应该使其 protected ,或者不给它任何修饰符(被视为“包访问”级别)。

这是一个例子:

package this.silly.package;

public class Foo() {
void thisAction() {
// do stuff...
}

private void somethingElse() {
// Do secret stuff.
}
}
package this.silly.package;

public class Bar extends Foo() {

// This will work
// because this class is in the same package as Foo.
@Override
void thisAction() {
// Do something else
}

// This will not work
// because Foo made this method private,
// so it is only accessible by Foo.
@Override
private void somethingElse() {
// Please don't do secret stuff. You might drive me crazy!
}
}

关于java - 重写父类(super class)中的私有(private)方法 - 有办法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59222046/

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