[英]How to choice what method should be called when use polymorphism
我需要一種方法來選擇應該調用誰的方法。
我正在調用一個使用“this”調用其方法之一的父方法。 問題是我在我的類中覆蓋了該方法,所以當調用父方法時,它會調用我的方法而不是它的方法。
public class MainTest
{
public static class A
{
public String m1()
{
return this.m2();
}
public String m2()
{
return "A.m2() called";
}
}
public static class B extends A
{
@Override
public String m1()
{
return "B.m1() called";
}
@Override
public String m2()
{
return "B.m2() called";
}
public String m3()
{
return super.m1();
}
}
public static void main(String[] args)
{
System.out.println(new B().m3());
}
}
我想實現“A.m2() 調用”,但實際輸出是“B.m2() 調用”
正如你所覆蓋的m2()
中B
,那么只有這樣,才能A.m2()
而不是運行B.m2()
是調用super.m2()
內B.m2()
即使你正在調用super.m1();
在B.m3()
調用this.m2()
在A.m1()
將仍然導致重寫B.m2()
來運行。
如果您不想在super.m2()
B.m2()
(或者在所有情況下都不想這樣做),那么唯一的選擇是創建一個您不在B
覆蓋的不同方法(並從A.m1()
調用它 - 您可能也必須更改或創建另一個A.m1()
):
public static class A {
public String m1(){ //you may need a different method to call from B.m3()
return this.anotherM2();
}
public String m2(){
return "A.m2() called";
}
public String anotherM2() {
return "A.m2() called";
}
}
您可以看到以下過程:
-B.m3 做 super.m1 是什么意思 A.m1
-A.m1 執行 this.m2,這里是 B,因此調用 B.m2
為了實現你想要的,你需要在B.m3
調用super.m2()
。
調用super.m1()
不起作用,因為A.m1
調用this.m2()
。 this
是運行時類型B
(您從未創建過A
對象,因此它不能是運行時類型A
),因此將調用B
的m2
。 您只能調用super.m2()
來實現您想要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.