1、向上转型
知识点:对象转型 -- 向上转型(自动转型)
Father father = new Son();
含义:子类类型 转 父类类型
注意:向上转型之后:
可以调用父类非私有化的成员属性
可以调用父类非私有化的方法属性
可以调用子类重写父类的成员方法
不可以调用子类自己的属性和方法
向上转型就是多态
多态的优缺点:
优点:需求升级时,不违反OCP原则
缺点:不可以调用子类自己的属性和方法(解决方案:再向下转型,就能调用子类自己的属性和方法)
2、向下转型 -- instanceof
知识点:对象转型 -- 向下转型(强制转型)
含义:父类类型 转 子类类型
注意:
1.向下转型有风险(一定要先向上转型后,再把引用向下转型)
2.向下转型必须使用instanceof判断(eg:狗类不能转化为猫类)
//ClassCastException - 类型转换异常 //经验:出现异常,一定要看报错信息 //Dog dog = (Dog) new Animal(); //正确使用向下转型:一定要先向上转型后,再把父类引用向下转型 Animal an = new Cat();//向上转型:将创建的子类cat对象的内存地址0X001,赋值给父类an, if(an instanceof Dog){//判断引用an中所指向的对象是否是Dog类(eg:狗类不能转化为猫类) Dog dog = (Dog) an; dog.eat(); }else if(an instanceof Cat){//判断引用an中所指向的对象是否是Cat类 Cat cat = (Cat) an;//父类an再将内存地址0X001赋值给子类cat cat.shout(); }