java 向上转型 向下转型

 我来答
候萱却璧
2019-04-14 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:35%
帮助的人:941万
展开全部
1.
引用a的类型是animal,是cat的父类。所以是“父类引用指向子类对象”。如果是“子类引用指向父类对象”,那应该写成
cat
a
=
new
animal();但这显然是不和逻辑的。
2.
你说的没错——“向上转型后,父类也只能调用父类已经有的方法”。但是子类如果覆盖了父类的方法,那么即使向上转型,方法的行为也表现为覆盖后的行为。这也是多态的一种体现。向上转型更多的用来体现一种编程上的“约定”。所有继承某个类或者实现某个接口的类,一定包含某个方法,这样在调用的时候,使得你也不必关系具体的实现细节,只要知道“这个类型中的某个方法能帮我完成工作”就可以了。
3.
向下转型,是“引用的类型”的变化,不是对象实例类型的变化。new什么,就是什么。不会因为向上或者向下转型而改变自己的类型。
4.
最后一个问题,不管向上还是向下转型,调用的都是实际类型中的那个方法。比如,animal
a
=
new
cat(); a.叫()。那这个叫就是cat类型实例中的“叫”方法。
兴蕾淡辰
2020-03-01 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.4万
采纳率:34%
帮助的人:723万
展开全部
哪个说的
如果你需要使用多态,那么就应该向上转型,至于为什么使用多态,什么时候使用,只有自己慢慢琢磨,也不用刻意去琢磨,时间久了,代码量多了,自己慢慢就会有感觉了
向下转型是不安全的,当然,如果你已经确定他是这个子类了,就可以向下转,如果你使用了多态,而又用到了向下转型,那么你可以考虑下你的设计是否有问题了
继承少用,多用实现(不能滥用)
如果你用了向下转型,那么当初是为了什么而向上转型呢?考虑下这个问题。
像反序化就要向下转型为自己的子类,因为反序列化得到的是一个Object
从集合取出元素也要向下转型,你可能说不用呀,那是java帮你做了,泛型都是使用
Object的擦除来实现的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
通畅又开心的小白桦4857
2020-12-29
知道答主
回答量:60
采纳率:75%
帮助的人:1.9万
展开全部

父子对象之间的转换分为了向上转型和向下转型,它们区别如下:

  • 向上转型 : 通过子类对象(小范围)实例化父类对象(大范围),这种属于自动转换

  • 向下转型 : 通过父类对象(大范围)实例化子类对象(小范围),这种属于强制转换

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式