[英]Is there a way to determine if a method has been overridden in a Java class
[英]Call method in class even if it has been overridden in a subclass (java)
假设我有这种方法:
public void callDo(FeelFreeToExtend ext){
ext.do()
}
FeelFreeToExtend在哪里:
public class FeelFreeToExtend {
public void do(){
System.out.println("DO");
}
}
现在,我知道有人可以重写do方法,但是有没有一种方法可以在FeelFreeToExtend
类中显式调用do方法? 我认为这绝不是一个好主意,但是仍然很有趣。
不,不更改所有调用者的字节码/代码是不可能的。 如果您想始终调用FeelFreeToExtend.do(),请将该方法定为final。
将非访问限定符“ final”附加到方法(使方法成为最终方法),这将阻止方法被覆盖,因此将始终从任何子类中调用该方法的此版本。
其次,如果您只想从派生类中访问超类方法,即使该超类方法已被覆盖,则只需在其后附加“ super”即可调用该方法。 在方法调用之前。 要从子类中调用超类的方法“ display”,请使用super.display()。 (这假设您是编码子类的人)
实际上,Peter所说的并不完全正确:实际上,可以使用JNI( http://java.sun.com/docs/books/jni/html/fldmeth.html#26109 )执行重写的方法。 在JNI中,有一个称为CallNonvirtual<Type>Method
可以完全允许这样做。
应用服务器或框架可以与小型JNI实用程序一起提供,以允许这种功能...
没有JNI,我认为这是不可能的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.