3 回答

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊
多態(tài)性
1.靜態(tài)綁定/編譯時(shí)綁定/早期綁定/方法重載。(在同一類中)
2.動(dòng)態(tài)綁定/運(yùn)行時(shí)綁定/后期綁定/方法覆蓋。(在不同的類中)
重載示例:
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貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
方法重載將是靜態(tài)多態(tài)的一個(gè)例子
而重寫(xiě)將是動(dòng)態(tài)多態(tài)的一個(gè)例子。
因?yàn)?,在重載的情況下,編譯時(shí)編譯器知道鏈接到調(diào)用的方法。但是,在運(yùn)行時(shí)確定動(dòng)態(tài)多態(tài)性

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