什么是多态性,它的作用是什么,如何使用它?
让我们用一个比喻。对于一个给定的音乐剧本,每一个演奏它的音乐家都会在解释中给予自己的触摸。
音乐家可以用接口来抽象,音乐家所属的流派可以是一个抽象的类,它定义了一些全局性的解释规则,每个演奏的音乐家可以用一个具体的类来建模。
如果你是音乐作品的听众,你就有一个对脚本的参考,例如巴赫的《Fuga and Tocata》,而每个演奏它的音乐家都以自己的方式多态地演奏它。
这只是一个可能的设计的例子(在Java中)。
public interface Musician {
public void play(Work work);
}
public interface Work {
public String getScript();
}
public class FugaAndToccata implements Work {
public String getScript() {
return Bach.getFugaAndToccataScript();
}
}
public class AnnHalloway implements Musician {
public void play(Work work) {
// plays in her own style, strict, disciplined
String script = work.getScript()
}
}
public class VictorBorga implements Musician {
public void play(Work work) {
// goofing while playing with superb style
String script = work.getScript()
}
}
public class Listener {
public void main(String[] args) {
Musician musician;
if (args!=null && args.length > 0 && args[0].equals("C")) {
musician = new AnnHalloway();
} else {
musician = new TerryGilliam();
}
musician.play(new FugaAndToccata());
}