現在
對於樂器例子
所有這些新類都能與老類——tune()默契地工作
//: Music
// An extensible program
import java
class Instrument
public void play() {
System
}
public String what() {
return
}
public void adjust() {}
}
class Wind
public void play() {
System
}
public String what() { return
public void adjust() {}
}
class Percussion
public void play() {
System
}
public String what() { return
public void adjust() {}
}
class Stringed
public void play() {
System
}
public String what() { return
public void adjust() {}
}
class Brass
public void play() {
System
}
public void adjust() {
System
}
}
class Woodwind
public void play() {
System
}
public String what() { return
}
public class Music
// Doesn
// added to the system still work right:
static void tune(Instrument
//
i
}
static void tuneAll(Instrument
for(int i =
tune(e[i]);
}
public static void main(String[] args) {
Instrument3[] orchestra = new Instrument3[5];
int i = 0;
// Upcasting during addition to the array:
orchestra[i++] = new Wind3();
orchestra[i++] = new Percussion3();
orchestra[i++] = new Stringed3();
orchestra[i++] = new Brass3();
orchestra[i++] = new Woodwind3();
tuneAll(orchestra);
}
} ///:~
新方法是what()和adjust()。tW.WIngwIT.cOM前者返回一個String句柄,同時返回對那個類的說明;後者使我們能對每種樂器進行調整。
在main()中,當我們將某樣東西置入Instrument3數組時,就會自動上溯造型到Instrument3。
可以看到,在圍繞tune()方法的其他所有代碼都發生變化的同時,tune()方法卻絲毫不受它們的影響,依然故我地正常工作。這正是利用多形性希望達到的目標。我們對代碼進行修改後,不會對程序中不應受到影響的部分造成影響。此外,我們認為多形性是一種至關重要的技術,它允許程序員“將發生改變的東西同沒有發生改變的東西區分開”。
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19159.html