本文介紹了多態在Java的方法參數中不起作用的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我寫了以下代碼:
class Plane {}
class Airbus extends Plane {}
public class Main {
void fly(Plane p) {
System.out.println("I'm in a plane");
}
void fly(Airbus a) {
System.out.println("I'm in the best Airbus!");
}
public static void main(String[] args) {
Main m = new Main();
Plane plane = new Plane();
m.fly(plane);
Airbus airbus = new Airbus();
m.fly(airbus);
Plane planeAirbus = new Airbus();
m.fly(planeAirbus);
}
}
結果為:
I'm in a plane
I'm in the best Airbus!
I'm in a plane
毫不奇怪,前兩個調用分別給出I'm in a plane
和I'm in the best Airbus!
。
Plane planeAirbus = new Airbus();
該方法將該對象視為飛機,即使實際對象是一架空中客車。即使我將abstract
添加到class Plane
,也沒有什么變化,最后一次調用的結果仍然是I'm in a plane
因此,問題是為什么多態在方法參數和調用中不起作用?這樣做有什么目的嗎?它是如何工作的?
推薦答案
這里的問題是JAVA不支持方法參數的動態綁定。您看到的是靜態綁定,即在編譯時選擇要調用的方法的重載。
另見:Static Binding and Dynamic Binding
這篇關于多態在Java的方法參數中不起作用的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,