多态存在的三个必要条件:1.继承 2.重写 3.父类引用指向子类对象.
首先要知道多态的定义:多态是同一个行为具有多个不同表现形式或形态的能力。也就是同一个接口,使用不同的实例而执行不同操作。 比如下面的代码:
public class duotai { public static void main(String[] args) { cat c=new cat(); dog d=new dog(); show_c(c); show_d(d); } /*定义猫类的show函数*/ public static void show_c(cat c) { c.eat(); c.work(); } /*定义狗类的show函数*/ public static void show_d(dog d) { d.eat(); d.work(); } } /*定义猫类*/ class cat { public void eat() { System.out.println("猫吃鱼"); } public void work() { System.out.println("猫抓老鼠"); } } /*定义狗类*/ class dog{ public void eat() { System.out.println("狗啃骨头"); } public void work() { System.out.println("狗看家"); } }输出:
猫吃鱼 猫抓老鼠 狗啃骨头 狗看家上面这段代码定义了两个类猫和狗,并且分别实例化对象c和d,并且定义猫类和狗类的show函数。那么问题来了,这两个show可不可以合成一个,如果可以那么代码就更加简化了。
那么这两个show函数合并的关键在于,定义函数时参数列表的不同,一个参数为cat类,一个为dog类,因此要想合并,必须统一参数列表。
因此多态就来了。
输出:
猫吃鱼 猫抓老鼠 狗啃骨头 狗看家上面就是使用多态来重写show函数,代码中多态满足三要素: 1.继承 :猫类和狗类继承自动物抽象类:class cat extends Animal,class dog extends Animal 2.重写 :对eat()抽象函数的重写 3.父类引用指向子类对象:Animal c= new cat(); Animal d= new dog();也称为 向上转型
注意:在向上转型下,实例不能调用自身定义的方法,必须通过向下转型才可以调用自身方法。