多态存在的三个必要条件:要有继承、要有重写、父类变量引用子类对象。 当使用多态方式调用方法时: 首先检查父类中是否有该方法,如果没有,则编译错误;如果有,则检查子类是否覆盖了该方法。 如果子类覆盖了该方法,就调用子类的方法,否则调用父类方法。 从上面的例子可以看出,多态的一个好处是:当子类比较多时,也不需要定义多个变量,可以只定义一个父类类型的变量来引用不同子类的实例。请再看下面的一个例子
package demo; public class Demo { public static void main(String [] args) { Master ma = new Master(); ma.feed(new Animal(),new Food()); ma.feed(new Cat(),new Fish()); ma.feed(new Dog(),new Bone()); } } class Animal{ public void eat(Food f) { System.out.println("我是一个小动物,正在吃"+f.getFood()); } } class Cat extends Animal{ @Override public void eat(Food f) { System.out.println("我是一直猫咪,我正在吃"+f.getFood()); } } class Dog extends Animal{ @Override public void eat(Food f) { System.out.println("我是一直小狗,正在吃"+f.getFood()); } } class Food{ public String getFood() { return "食物"; } } class Fish extends Food{ @Override public String getFood() { return "鱼" ; } } class Bone extends Food{ @Override public String getFood() { return "骨头"; } } class Master{ public void feed(Animal an,Food f) { an.eat(f); } }
运行结果:
我是一个小动物,正在吃事物
我是一只小猫咪,正在吃鱼
我是一只狗狗,正在吃骨头
Master 类的 feed 方法有两个参数,分别是 Animal 类型和 Food 类型,因为是父类,所以可以将子类的实例传递给它,这样 Master 类就不需要多个方法来给不同的动物喂食。
你打算打赏多少钱呢?

(微信扫一扫)