多态概述
定义:指同一行为,具有多个不同表现形式
多态的使用
多态前提
1.extends继承或者implements实现(二选一)
2.方法的重写(不重写的话,无意义)
3.父类引用指向右侧子类对象(格式上的体现)
格式:
父类名称 对象名 = new 子类名称();
或者
接口名称 对象名 = new 实现类名称();
访问成员变量的两种方式:
1.直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找(无法直接访问子类的成员变量,只能通过间接访问成员方法)
2.间接通过成员方法:看该方法属于谁,优先用谁,没有则向上找
(子类没有覆盖重写就是使用父类;否则使用的是子类)
口诀:编译看左边,运行还看左边
访问成员方法的规则:
看new的是谁,就优先用谁,没有则向上找
口诀:编译看左边,运行看右边(也就是说子类特有的方法,父类中没有的方法,无法直接调用)
** 多态的好处**
在实际开发当中,父类类型作为方法形式参数,传递子类对象给方法,进行方法的调用
引用类型转换
多态的转型分为向上转型和向下转型:
-
**向上转型:**多态本身就是子类类型向父类类型向上转型的过程
格式: 父类类型 变量名 = new 子类类型();
该转型方法一定是安全的 -
**向下转型:**父类类型向子类类型向下转换的过程,这个过程是强制的
格式:子类类型 变量名 = (子类类型) 父类变量名;
该转型方法不一定安全此时可以访问子类特有的方法和变量
因此,需要用到instanceof关键字,给引用变量做类型校验。
格式: 对象 instanceof 类名称
返回一个boolean值