多态的好处体现在:当一个函数的形式参数需要接受多个子类时,就可以将这些子类共同的父类充当形式参数,可以避免因所需形式参数不同而创建多个方法的情况。
比如:
存在父类:Animal
存在子类:Cat Dog Pig
存在方法:Eat(方法功能为:传入一个动物输出该对象的食物)
正常情况下,就需要创建三个方法,三个方法的参数反别是Cat Dog Pig
然而,有了多态之后,就可以只定义一个方法,将方法参数设置为他们的父类Animal。如此,这个方法就可以同时接收Cat Dog Pig对象作为形参。这种使用方式我们称之为向上转型。即创建一个父类引用,将其指向子类对象。
多态的弊端在于:使用向上转型时,创建的类只能使用父类拥有的方法,不能使用子类中所特有的方法。为了解决这个问题,可以将创建的对象再通过强制转换,转换为对应子类。这种方式,我们称之为向下转型。
在使用多态的向上转型方式时,所创建的对象,只能调用父类中的变量,而无法调用子类中的变量;而再调用方法时,会优先调用子类的方法,当子列不存在该方法(未对该方法重写)时,才会去调用父类中的方法。