调用不同的子类将会产生不同的行为,而无须明确知道这个子类实际上是什么. 比如,在一个可以播放音频文件的程序中,媒体播放器可能需要加载一个AudioFile对象然后play它,我们把一个play()的方法放在这个对象里,它负责解压或者提取音频,然后把音频引导到声卡或者扬声器,一个AudioFile行为可以如下这么简单: audio_file.play() 然而,对于不同类型的文件,解压和提取音频文件的过程是很不一样的..wav文件存储为压缩的音频,.mp3..wma和.ogg文件都有不同的压缩算法…