多态的本质:引用数据类型子父类之间的类型转换问题
大:父类和父接口 小:子类/实现类
多态的前提:
1.必须要有继承关系/实现关系
2.有方法的重写//体现多态的特性:动态绑定
3.父引用指向子类对象//多态的表达式(类似于基本数据类型的自动提升)
引用数据类型:FU fu=new Zi();
基本数据类型: double d = 100;
多态的成员访问特点:
成员变量: 引用是什么类型,就只能访问哪个类型中的变量值.
成员方法: 对象真实是什么类型就执行哪个类型里的方法. --> 动态绑定
多态的弊端: 父引用不能访问子类成员!
对象调..
1. 找到对象创建的语句
2. 看对象干嘛
对象调属性: 编译看左边,运行看左边
对象调方法: 编译看左边,运行看右边
引用数据类型:
向上转型: -> 父引用指向子类对象
父类型 父引用 = new 子类型();
向下转型:
子类型 对象名(父引用) = (子类型)父引用;
对象名(父引用).castvar
基本数据类型: byte,short,char,int,long,float,double
自动提升:
大类型 变量名 = 小类型的值/变量;
强制转换:
小类型 变量名 = (小类型)(值/变量)
1.成员变量:
葵花宝典第1式:编译看左边,运行看左边
编译看左边:编译时看父类中有没有此变量,如果有,就不报错,否则,报错。
运行看右边:编译正常的情况,打印输出变量的值,是找左边父类要。
2.成员方法:
葵花宝典第2式:编译看左边,运行看右边
编译看左边:编译时看父类中有没有此方法,如果有,就不报错,否则,报错。
运行看右边:编译正常的情况,需要调用方法,找的是右边子类中的该方法执行