3 回答

TA貢獻1712條經驗 獲得超3個贊
多態性
1.靜態綁定/編譯時綁定/早期綁定/方法重載。(在同一類中)
2.動態綁定/運行時綁定/后期綁定/方法覆蓋。(在不同的類中)
重載示例:
class Calculation {
void sum(int a,int b){System.out.println(a+b);}
void sum(int a,int b,int c){System.out.println(a+b+c);}
public static void main(String args[]) {
Calculation obj=new Calculation();
obj.sum(10,10,10); // 30
obj.sum(20,20); //40
}
}
壓倒一切的例子:
class Animal {
public void move(){
System.out.println("Animals can move");
}
}
class Dog extends Animal {
public void move() {
System.out.println("Dogs can walk and run");
}
}
public class TestDog {
public static void main(String args[]) {
Animal a = new Animal(); // Animal reference and object
Animal b = new Dog(); // Animal reference but Dog object
a.move();//output: Animals can move
b.move();//output:Dogs can walk and run
}
}

TA貢獻1803條經驗 獲得超6個贊
方法重載將是靜態多態的一個例子
而重寫將是動態多態的一個例子。
因為,在重載的情況下,編譯時編譯器知道鏈接到調用的方法。但是,在運行時確定動態多態性

TA貢獻1796條經驗 獲得超10個贊
動態(運行時)多態性是運行時存在的多態性。這里,Java編譯器不了解在編譯時調用哪個方法。只有JVM決定在運行時調用哪個方法。使用實例方法的方法重載和方法重寫是動態多態的示例。
例如,
考慮一個序列化和反序列化不同類型文檔的應用程序。
我們可以將'Document'作為基類,并從中派生出不同的文檔類型類。例如XMLDocument,WordDocument等。
Document類將'Serialize()'和'De-serialize()'方法定義為virtual,每個派生類將根據文檔的實際內容以自己的方式實現這些方法。
當需要序列化/反序列化不同類型的文檔時,文檔對象將由“Document”類引用(或指針)引用,并且在調用“Serialize()”或“De-serialize()”方法時在其上,調用適當版本的虛擬方法。
靜態(編譯時)多態性是編譯時顯示的多態性。這里,Java編譯器知道調用哪個方法。使用靜態方法重載方法和方法重寫; 使用私有或最終方法重寫的方法是靜態多態的示例
例如,
員工對象可能有兩個print()方法,一個不帶參數,另一個帶前綴字符串以及員工數據。
給定這些接口,當在沒有任何參數的情況下調用print()方法時,查看函數參數的編譯器知道要調用哪個函數,并相應地生成目標代碼。
有關詳細信息,請閱讀“什么是多態”(Google it)。
添加回答
舉報