面向对象——多态
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);}}
通过父类接受各个类,执行时还是它们各个类重写的方法
本文分享自微信公众号 - IT那个小笔记(qq1839646816)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

浙公网安备 33010602011771号