簡體   English   中英

使用Java中的反射調用重寫的實例方法

[英]Invoke an overridden instance method using reflection in java

我想這樣做: 使用反射調用重寫的基本方法,但是

  • 用Java完成
  • 並且在子方法上未指定@Override時(這是當我無權訪問源代碼時)

我有:


package test;

public class A{
  public String toString(){
    return "A";
  }
}

package test;

public class B extends A{
  public String toString(){
    return "B";
  }
}

我想要((A)(new B())).toString()是“ A”,而不是“ B”。 有沒有辦法通過反射來做到這一點?

MethodHandles可用於調用超類方法:

https://www.baeldung.com/java-method-handles

您的挑戰(我希望((A)(new B())).toString()為“ A”,而不是“ B”。)與反射完全無關。 即使您在Java程序中執行((A)(new B())).toString()而沒有進行反射,它也將始終顯示“ B”。 原因是類A和類B都覆蓋了toString()方法,在運行時將確定實際對象類型,並調用該類型/類的toString()方法。 因此,在您的示例中:您創建了一個B的實例,因此實際對象類型為B! 然后您向上轉換為A,因此引用類型現在為A,但是引用的“真實”對象類型將保持為B!

https://www.programcreek.com/2009/02/overriding-and-overloading-in-java-with-examples/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM