我知道我可以使用反射来调用私有(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/