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源创计划”,欢迎正在阅读的你也加入,一起分享。