[英]Invoke an overridden instance method using reflection in java
我想這樣做: 使用反射調用重寫的基本方法,但是
我有:
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可用於調用超類方法:
您的挑戰(我希望((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.