多态的前提:
有继承/实现关系
有方法重写
有父类引用指向子类对象
多态中成员访问特点:
成员变量:编译看父类,执行看父类
成员方法:编译看父类,执行看子类
多态的好处:
提高了程序的扩展性
具体体现:定义方法时,使用父类型作为形式参数,该方法就可以接收这父类的任意子类对 象
多态的弊端:
不能使用子类的特有方法
解决方法:直接创建新的子类对象、向下转型由父类引用转为子类对象
多态的转型:
向上转型:
父类 父 = new 子类()
向下转型:
子类 子 = (子类) 父 //类似强制转换
由父类引用转为子类后就可以使用子类特有方法
多态转型存在的风险:
如果被转的引用类型变量,对应的实际类型和目标类型不一致,报错ClassCastException
解决:使用instanceof关键字,变量名 instanceof 类型(一致返回true)