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

标签 java inheritance

我知道,如果我想要做的事情是有意的,该方法将受到保护,而不是私有(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/

相关文章:

java - Spring 和继承的线程安全

c# - Fluent NHibernate 两级继承问题

java - BufferedReader和InputStream读取错误

java - Spring Security JWT - 400 错误请求 : "invalid grant" "Bad credentials"

java - 检查 Twitter、Facebook、LinkedIn 用户名(电子邮件)是否已经存在

java - 在Spring Boot中将soap响应转换回xml字符串

c# - 关于 .NET 框架中继承的一般问题

java - 需要继承和构造函数代码方面的帮助

c++ - (重定义错误)在C++中从一个基类创建多个继承类

java - 如何在未经用户同意的情况下在 ICS 上安装 (x509/pk12) 证书?