我得到了这句话作为作业。
哺乳动物宠物=新狗();
Samoyed s=宠物;
我们得到了一个这样的图表:
动物->脊椎动物->哺乳动物->狗->哈士奇,萨莫耶德,比格犬
我的理解是代码是无效的,不能被强制转换。哺乳动物指的是狗对象,而Samoyed类型不在狗或哺乳动物中。
对吗?
发布于 2013-05-03 09:12:08
您可以将子引用放在父对象中,但反转不是真的。第一个声明是有效的,因为狗是哺乳动物的孩子。但第二个语句是不正确的,因为您正在尝试将Mammal的父对象指向其子引用Samoyed。
基本上,JVM使用父对象的概念来保存多态的任何子引用。想象一下这样一个场景,你必须设计一种方法,它可以接受任何种类的动物的输入。你可以简单地写testMethod(动物),这个方法可以接受任何动物或它的孩子类型的对象(它们也是动物,因为他们继承了)。如果此功能不可用,那么您将为不同种类的动物编写不同的方法。
希望它能帮上忙!
发布于 2013-05-03 11:50:42
Samoyed s = pet; 将产生编译时错误,因为宠物是哺乳动物,而哺乳动物不一定是Samoyed。但如果您显式地将其强制转换
Samoyed s = (Samoyed)pet;不会出现编译错误。然而,这行代码将在运行时抛出一个ClassCastException,因为宠物的实际类是狗,而狗不是Samoyed的子类
发布于 2013-05-03 08:52:16
这不是有效的强制转换,因为它试图将Dog的实例赋给声明为Samoyed类型的变量。你的假设是正确的。
https://stackoverflow.com/questions/16349965
复制相似问题