package Page08;
// 这个例子就是多态的表现
class Instrument{
void play(Note n) {
System.out.println("Instrument.play() " + n);
}
String what() {
return "Instrument";
}
void adjust() {
System.out.println("Adjusting Instrument");
}
}
class Wind extends Instrument{
@Override
void play(Note n) {
System.out.println("Wind.play() " + n);
}
@Override
String what() {
return "Wind";
}
@Override
void adjust() {
System.out.println("Adjusting Wind");
}
}
class Percussion extends Instrument{
@Override
void play(Note n) {
System.out.println("Percussion.play() " + n);
}
@Override
String what() {
return "Percussion";
}
@Override
void adjust() {
System.out.println("Adjusting Percussion");
}
}
class Stringed extends Instrument{
@Override
void play(Note n) {
System.out.println("Stringed.play() " + n);
}
@Override
String what() {
return "Stringed";
}
@Override
void adjust() {
System.out.println("Adjusting Stringed");
}
}
class Brass extends Instrument{
@Override
void play(Note n) {
System.out.println("Brass.play() " + n);
}
@Override
void adjust() {
System.out.println("Adjusting Brass");
}
}
class Woodwind extends Wind{
@Override
void play(Note n) {
System.out.println("Woodwind.play() " + n);
}
@Override
String what() {
return "Woodwind";
}
}
public class Music3 {
public static void tune(Instrument i) {
i.play(Note.MIDDLE_C);
}
public static void tuneAll(Instrument[] e) {
for(Instrument i : e) {
tune(i);
}
}
public static void main(String[] args) {
Instrument[] orchestra = {
new Wind(),
new Percussion(),
new Stringed(),
new Brass(),
new Woodwind()
}; // 自动向上转型为Instrument类型
tuneAll(orchestra);
Instrument ist = new Wind();
tune(ist);
}
}
随手记一下:
我们所做的代码修改,不会对程序中其他不应受到影响的部分产生破坏。
多态是一项让程序员“将改变的事物与未变的事物分离开来”的重要技术。 —— java编程思想