类的继承不仅仅只是在定义新类的时候以你已经定义约一个类作为基础实现类的重用,而且它还利用一种被称作多态性(polymorphism)的技术为你的应用程序设计增加巨大的灵活性。那么什么是多态性呢?
多态性这个词的意思有设定几种不同格式或者形状的能力。在程序设计阶段,它指的是一个给定类型的单一变量可被用来引用不司类型对象,并旦可自动地调用变量所引用的对象类型的特定方法。这使得对一个单一方法的调用将根据应用这个调用的对象类型得到不同的操作行为。
要获得多态性的行为需要满足几项要求,因此,让我们一一介绍它们。首先,多态性对派生类对象起作用,它依赖于类层次内的一个新功能。直到现在,我们总是使用一个给定类型的变量引用同种类型的对象。在这点上,派生类引入了一些新的灵活性。当然,我们可以在一个派生类类型的变量中存储一个派生类对象的引用,而且我们也可以在任何一个直接的或者间接的基类变量中存储它。例如,如同前面的示意图所示,一个Dog类型的对象变量可以用来存储一个从Dog派生出来的任何类型的对象引用。如果这里的Dog类是从Animal类中派生出来的,则一个Animal.类型的变量也可以用来引用Spaniel、Chihuahua或者Collie对象。
当调用一个方法时,要得到多态性的操作,这个方法就必须是一个基类的成员,并且还要包含在派生类中。如果这个方法不是基类的一个成员,你就不能使用基类变量调用派生类对象的方法。在派生类中的方法定义必须与基类中的方法具有相同的署名和相同的返回类型,并且必须有一个限制不会更加严格的访问修饰符。事实上,如果你在派生类中用与基类中的方法的相同署名定义一个方法,任何试图说明一个不同的返回类型,或者是一个更加严格的访问修饰符,都会被编译器作为一个错误标记。