什么是多态?
同类型的对象,表现出的不同形态
多态的表现形式
父类类型 对象名称 = 子类对象
多态的前提
1.有继承关系
2.有父类引用指向子类 Fu f = new Zi()
3.有方法重写
多态的好处
使用父类型作为参数,可以接收所有子类对象
体现多态的扩展性和便利
多态调用成员的特点
变量调用:编译看左边,运行也看左边
方法调用:编译看左边,运行看右边
理解:
Animal a = new Dog();
现在用a去调用变量和方法
而a是Animal类型的,所以默认都会从Animal这个类中去找
成员变量:在子类的对象中,会把父类的成员变量也继承下 父:name 子:name
成员方法:如果子类对方法进行了重写,那么在虚方法表中是会把父类的方法进行覆盖的
在多态形式下,右边对象可以实现解耦合,便于扩展和维护
优势:
定义方法的时候,使用父类型作为参数,可以接收所有子类对象,体现多态的拓展性和便利
弊端:
不能调用子类中特有的功能,因为在编译的时候看左边,如果这左边的父类当中没有看见这个方法,那么会直接报错
解决方案:将其在变回子类类型,在转换的时候不能瞎转换,注意这个
示例:Animal a = new Dog();
Dog d = (Dog) a;
在Java中有一个类型判断,可以防止转换错误,转换时用instanceof关键字进行判断