1.什么是多态
-
一个对象有多种表示形态
-
一个是表示自己的类型,还有表示自己父类的类型
Dog dog1 = new Dog();Animal dog2 =new Dog(); //Dog对象也可以赋值给父类型变量来表示
2.多态的特点
-
子类对象赋值给父类类型运行时,表现的是子类特征
-
注意:
1.多态形式的特点展现是对重写方法,因为在编译时是找当前变量类是否有这个方法。上图Animal类型的变量去调用eat(),如果Animal中没有eat()编译不会通过会报错。编译通过之后,运行时就直接先在对象本身类Dog中去找找不到再到父类
2.字段没有多态形式,变量是什么类型就找到那个类的字段
3.静态也没有因为在还没有开始执行就加载到了方法区,直接就是变量的类来调用
3.多态的好处
-
继承,方法的重写加上多态的表达使代码的扩展性大大提高。调用方只管调用,不管细节,而当我们新增一种Animal的子类时,只要确保重写方法编写正确,不用管原来的代码是如何调用的。
-
没有使用多态的代码
-
pulic class Person{ void feedDog(Dog dog){ dog.eat(); } void feedCat(Cat cat){ cat.eat(); } public static void main(String[] args){ Person per = new Person(); Dog dog = new Dog(); per.feedDog(dog); Cat cat = new Cat(); per.feedCat(cat); }}
-
使用多态后的代码
public class Person{ void feedAnimal(Animal anim){ anim.eat(); } public static void main(String[] args){ Person per = new Person(); Animal dog - new Dog(); Animal cat = new Cat(); per.feedAnimal(cat); }}
-
通过父类接受各个类,执行时还是它们各个类重写的方法