多态(对象)
entends 继承 或者 implements 实现,是多态性的前提
多态性的体现
其实就是一句话 : 父类引用指向子类对象
- 格式:
- 父类名称 对象名 = new 子类名称 ();
- 或者:
- 接口名称 对象名 = new 实现类名称 ();
访问成员变量方式 有两种
-
直接通过子类对象访问 成员变量:
等号左边是谁,就优先用谁,没有则向上找
-
间接通过成员方法访问 成员变量:
. 该方法属于谁,就优先用谁,没有就向上找(new 了谁)
访问成员方法的规则:
- 创建的对象是谁,就优先用谁,如果没有则向上找
对比:
成员变量:编译看左边,运行还看左边
成员方法 :编译看左边,运行看右边
多态好处
向上转型
所谓向上转型,就好比你把 一直兔子说成是一只动物,是大集合 包含 小集合的关系。
一定是安全的—> 小范围 到 大范围
弊端: 无法调用子类方法
解决方案 : 使用对象的向下转型 还原
向下转型
所谓向下转型,也就是 大集合 —>小集合的过程。创建一只猫,把它当作动物看没问题。
现在给你一只动物(实际上是只猫),你想让这只动物上树,应该使用哪种动物的姿势呢。
此时我们就需要 用instance 来判断它是不是猫,如果是猫,就可以将动物看作猫,让猫上树。
否则,让一只不是猫的动物,让它上树,就会出现问题。
instanceof(向下转型一定要用)
如何才能知道 一个父类引用的对象,本来是什么子类?
格式:
- 对象 instanceof 类名称
这将会得到一个 boolean 值结果,也就是判断前面的 对象能不能当作后面类型的实例