1.因为多态,不需要为每一个类型定义方法
package com;
class Animal {
public void eat(){
System.out.println("Animal eat");
};
}
class Cat extends Animal {
public void eat() {
System.out.println("Cat eat");
}
}
class Dog extends Animal {
public void eat() {
System.out.println("Dog eat");
}
}
public class App2 {
public static void showCatEat (Cat c){
c.eat();
}
public static void showDogEat (Dog d){
d.eat();
}
public static void showAnimalEat (Animal a){
a.eat();
}
public static void main(String[] args) {
Cat c = new Cat();
Dog d = new Dog();
showCatEat(c);
showDogEat(d);
//用多态的方式,参数是Animal,会自动将Cat和Dog转换为Animal,而Animal调用时,因为多态执行的又是Cat和Dog的eat
//这样就不需要定义多种参数类型的方法了
showAnimalEat(c);
showAnimalEat(d);
}
}
2.因为多态,可以将多个类型保存到列表中
package com;
import java.util.LinkedList;
import java.util.List;
public class App2 {
public static void main(String[] args) {
List<Object> list = new LinkedList<>();
list.add("123");
System.out.println(list.get(0).toString()); //123
System.out.println(new Object().toString()); //java.lang.Object@29453f44
}
}
当我们将String
填入到列表时,自动转型为Object
,调用toString
方法,因为多态调用的还是String
的toString