我知道,如果要执行此方法,该方法将被保护为非私有方法,但是我想创建自己的PriorityQueue
,这将需要多次调用siftUp
。我无法编辑该字段的声明,因为PriorityQueue
是Java库的一部分,因此我正在寻找另一种调用它的方法。我唯一能做的就是从库中复制整个类并将其更改为我的需要吗?
答案 0 :(得分:2)
不幸的是,没有任何方法可以覆盖超类的私有方法。
根据Oracle's documentation on Controlling Access to Members of a Class,私有方法仅供类本身访问。
以下是超类对子类可见性的表:
我相信他们通过提供 private 可见性,为开发人员提供了实现“最低特权”原则的途径,因此无法在创建该类的类之外的任何地方对其进行访问。 / p>
如果您希望能够覆盖它,则应使其受到保护或不赋予任何修饰符(被视为“打包访问”级别)。< / p>
这里是一个例子:
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!
}
}