我知道,如果我想要做的事情是有意的,该方法将受到保护,而不是私有(private)的,但是我想创建自己的 PriorityQueue
,需要调用 siftUp
多来几次。我无法编辑该字段的声明,因为 PriorityQueue
是 java 库的一部分,因此我正在寻找另一种调用它的方法。我唯一能做的就是从库中复制整个类并将其更改为我的需要吗?
最佳答案
不幸的是,没有办法重写父类(super class)的私有(private)方法。
根据Oracle's documentation on Controlling Access to Members of a Class ,私有(private)方法仅供类本身访问。
这是父类(super class)对子类的可见性表:
我相信他们通过提供私有(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/