多态的概述、多态的形式
什么是多态?
-
多态的常见形式
父类类型 对象名称 = new 子类构造器
接口 对象名称 = new 实现类构造器多态中成员访问特点
方法调用:编译看左边,运行看右边
- 变量调用:编译看左边,运行也是看左边(多态注重行为多态)
例子:父类动物类
public class Animal {public void run(){System.out.println("动物跑");}
子类 狗类和猫类重写了父类的方法
public class cat extends Animal{@Overridepublic void run() {System.out.println("🐱跑");}}public class dog extends Animal{@Overridepublic void run() {System.out.println("🐕跑");}}
测试
public static void main(String[] args) {Animal animal = new cat();animal.run();Animal animal2 = new dog();animal2.run();}
运行结果
可以通过getclass()方法,查看真正的运行类型,结果是,运行类型都是cat合dog就是子类的类型
结论:多态表现出,同一种类型,执行同一种行为不同的表现形式。



多态的好处
优势:
在多态的形式下,右边对象可以实现解耦合,便于维护和拓展
Animal a = new dog();
a.run();//后续业务行为随对象而变,后续代码无需改变定义方法的时候,使用父类类型作为参数,该方法就可以接收这父类的一切对象了,体现出多态性的扩展性和遍历性
public static void go(Aminal a){a.run();}
多态下引用数据类型的类型转换
自动类型转换(从子到父):子类对象赋值给父类类型的变量指向
强制类型转换(从父到子)
- 此时必须进行强制类型转换:子类 对象变量=(子类)父类类型的变量。
- 作用:可以解决多态下的劣势,可以实现调用子类独有的功能。
- 注意:如果转型后的类型和对象真实类型不是同一类型,那么在强转的时候就会出现ClassCastException

Java建议强转转换前使用instanceof判断当前对象的真实类型,再进行强制转换。
