多态实现条件
在Java中要实现多态,那么必须要满足以下几个条件,缺一不可:
必须在继承体系下
子类必须要对父类中的方法进行重写
通过父类的引用调用重写的方法
多态体现:在代码运行时,当传递不同类对象时,会调用对应类中的方法。
public class Animal {String name;int age;public Animal(String name,int age){this.name = name;this.age = age;}public void eat(){System.out.println(name+"吃饭");}
}public class Cat extends Animal{public Cat(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println(name+"吃鱼");}
}public class Dog extends Animal{public Dog(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println(name+"吃骨头");}
}
分割线/
public class TestAnimal {//编译器在编译代码的时候,并不知道要调用Dog还是Cat中eat的方法//等程序运行起来之后,形参a引用的具体对象确定后,才知道调用哪个方法//此时要注意:此处的形参类型必须是父类类型才可以,也就是向上转型public static void eat(Animal animal){animal.eat();}public static void main(String[] args){Cat cat = new Cat("元宝",2);Dog dog = new Dog("小七",1);eat(cat);eat(dog);}
}
运行结果👇
在上述代码中,分割线上方的代码是类的实现者 编写的,分割线下方的代码是类的调用者编写的
当类的调用者在编写eat();这个方法的时候,参数类型为Animal(父类),此时在该方法内部并不知道,也并不关注当前的animal引用指向的是哪个类型(哪个子类)的实例。此时animal这个引用调用eat方法可能会又多种不同的表现(和animal引用的实例对象相关),这种行为就叫做多态