首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象和转换java

对象和转换java
EN

Stack Overflow用户
提问于 2013-05-03 08:49:25
回答 4查看 131关注 0票数 1

我得到了这句话作为作业。

哺乳动物宠物=新狗();

Samoyed s=宠物;

我们得到了一个这样的图表:

动物->脊椎动物->哺乳动物->狗->哈士奇,萨莫耶德,比格犬

我的理解是代码是无效的,不能被强制转换。哺乳动物指的是狗对象,而Samoyed类型不在狗或哺乳动物中。

对吗?

EN

回答 4

Stack Overflow用户

发布于 2013-05-03 09:12:08

您可以将子引用放在父对象中,但反转不是真的。第一个声明是有效的,因为狗是哺乳动物的孩子。但第二个语句是不正确的,因为您正在尝试将Mammal的父对象指向其子引用Samoyed。

基本上,JVM使用父对象的概念来保存多态的任何子引用。想象一下这样一个场景,你必须设计一种方法,它可以接受任何种类的动物的输入。你可以简单地写testMethod(动物),这个方法可以接受任何动物或它的孩子类型的对象(它们也是动物,因为他们继承了)。如果此功能不可用,那么您将为不同种类的动物编写不同的方法。

希望它能帮上忙!

票数 1
EN

Stack Overflow用户

发布于 2013-05-03 11:50:42

代码语言:javascript
复制
Samoyed s = pet; 

将产生编译时错误,因为宠物是哺乳动物,而哺乳动物不一定是Samoyed。但如果您显式地将其强制转换

代码语言:javascript
复制
Samoyed s = (Samoyed)pet;

不会出现编译错误。然而,这行代码将在运行时抛出一个ClassCastException,因为宠物的实际类是狗,而狗不是Samoyed的子类

票数 1
EN

Stack Overflow用户

发布于 2013-05-03 08:52:16

这不是有效的强制转换,因为它试图将Dog的实例赋给声明为Samoyed类型的变量。你的假设是正确的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16349965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档