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