在面向对象的程序设计语言中,多态是继数据抽象和继承之后的第三种基本特征。
多态通过分离做什么和怎么做,从另一个角度将接口和实现分离开来。多态不但能够改善代码的组织结构和可读性,还能够创建可扩展的程序——即无论在项目最初创建时还是在需要添加新功能是都可以“生长”的程序!故,多态也称作动态绑定、后期绑定或运行时绑定。
封装:通过合并特征和行为来创建新的数据类型; 实现隐藏:通过将细节“私有化”把接口和实现分离开来; 多态:消除类型之间的耦合关系
package polymorphism.music;
//Note to play on musical instrument
public enum Note {
MIDDLE_C,
C_SHARP,
B_FLAT;//Etc;
}///:~
package polymorphism.music;
//:polymorphism/music/Intrument.java
import static net.mindview.util.Print.*;
public class Instrument {
public void play(Note n)
{
print("Instrument.play()");
}
}///:~
package polymorphism.music;
//:polymorphism/music/Wind.java
import static net.mindview.util.Print.*;
//Wind object are instruments
//because they have the same interface:
public class Wind extends Instrument {
//Redefine interface method:
public void play(Note n){
print("Wind.play() "+ n);
}
}///:~
package polymorphism.music;
//:polymorphism/music/Music.java
//Inheritance & up casting 继承和向上转型
public class Music {
public static void tune(Instrument i){
//....
i.play(Note.MIDDLE_C);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Wind flute=new Wind();
tune(flute); //up casting向上转型了
}
}///:~
/*output
* Wind.play() MIDDLE_C
*/
Music.tune()方法接受一个Instrument引用,同时也接受任何导出自Instrument的类。