父类对象强转子类对象
老师,您好!如图,为什么equals重写中Object对象强转Animal对象不会出现报ClassCastException异常?但我同样在主方法里也实例化Object对象强转Animal对象就会报异常,按道理说父类对象是不可以强转子类对象,除非定义成 Object obj2 = new Animal() 才可以正常编译。这个问题已经困惑我好些天了,一直未能解决,烦请老师帮忙解惑!
17
收起
正在回答
1回答
同学你好
1、调用Animal类中的equals方法时,若传入的参数实例对象类型为Animal或其子类,则程序可以正常运行;但若传入的参数类型为非Animal或其子类型时,则运行后出现类转换异常ClassCastException。
注:
2、主方法里引用obj1为Object类型(Object obj1;),其引用的对象类型也是Object(new Object();),故obj1无法转换其他类型,转换时会报ClassCastException异常。
3、Object obj2 = new Animal(),引用obj2类型为Object,引用的实例对象类型为Animal,故obj2可以强转为Animal类型。
4、Dog是Animal类型的子类,故可以直接赋值给animal,无需强转。
Dog d = new Dog(); Animal animal = d; // 向上转型 //相当于 Animal animal2 = new Dog();
注:建议同学此时不要纠结于此处哦,继续向后学习多态章节相关知识,学习后若仍无法理解,可继续在问答区发起提问哦。
多态章节:https://class.imooc.com/course/2064
祝学习愉快~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星