繁体   English   中英

即使已在子类(java)中重写了该类中的调用方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM