java - 我可以覆盖 Java 中的私有(private)方法吗?

标签 java reflection polymorphism access-modifiers

我知道我可以使用反射来调用私有(private)方法,并获取或设置私有(private)变量的值,但我想重写一个方法。

public class SuperClass {

    public void printInt() {
        System.out.println("I am " + getClass() + ". The int is " + getInt());
    }

    private int getInt() {
        return 1;
    }
}

public class SubClass extends SuperClass {

    public static void main(String[] args) {
        (new SubClass()).printInt();
    }

    public int getInt() {
        return 2;
    }
}

我希望 SubClass 中的 main 方法打印出 2,但它打印出 1。 我听说这可以通过反射(reflection)来完成,但我不知道该怎么做。 如果不是反射(reflection),有人知道另一种方法吗? (除了使 SuperClass.getInt() protected ,或将 printInt() 方法复制并粘贴到 SubClass 中。) 如果实际上无法覆盖私有(private)方法,是否有一种方法可以在其上放置某种触发器,在私有(private)方法执行之前或之后调用我的子类中的方法?

最佳答案

您不能覆盖私有(private)方法,因为没有其他类(包括派生类)可以判断它的存在。这是私有(private)的。

私有(private)方法隐式final

相关说明,子类可以声明与父类(super class)中的 private 字段或方法同名的字段或方法,因为从子类的角度来看,这些成员不存在。这些成员之间没有特殊关系。

关于java - 我可以覆盖 Java 中的私有(private)方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10623913/

相关文章:

java - 使用 JobRegistryBeanPostProcessor bean 时,sql 脚本不起作用

java - 获取一个月的第三个星期五

java - 是否可以使用Java反射或各种技术来检查一个类是否有父类?

java - 如何使用 httpclient 发送 url post

java - 实例化通用对象

ruby-on-rails - 将 STI 和多态与 Rails 4 结合

c++ - 多态性:如何访问派生类成员函数?

java - 绘制随机粗细线

java - 如何使用 Java 反射来检查 ParameterizedType 参数是否扩展特定类

java - 开始时更新菜单