java 向上转型 向下转型
3个回答
展开全部
1.
引用a的类型是animal,是cat的父类。所以是“父类引用指向子类对象”。如果是“子类引用指向父类对象”,那应该写成
cat
a
=
new
animal();但这显然是不和逻辑的。
2.
你说的没错——“向上转型后,父类也只能调用父类已经有的方法”。但是子类如果覆盖了父类的方法,那么即使向上转型,方法的行为也表现为覆盖后的行为。这也是多态的一种体现。向上转型更多的用来体现一种编程上的“约定”。所有继承某个类或者实现某个接口的类,一定包含某个方法,这样在调用的时候,使得你也不必关系具体的实现细节,只要知道“这个类型中的某个方法能帮我完成工作”就可以了。
3.
向下转型,是“引用的类型”的变化,不是对象实例类型的变化。new什么,就是什么。不会因为向上或者向下转型而改变自己的类型。
4.
最后一个问题,不管向上还是向下转型,调用的都是实际类型中的那个方法。比如,animal
a
=
new
cat(); a.叫()。那这个叫就是cat类型实例中的“叫”方法。
引用a的类型是animal,是cat的父类。所以是“父类引用指向子类对象”。如果是“子类引用指向父类对象”,那应该写成
cat
a
=
new
animal();但这显然是不和逻辑的。
2.
你说的没错——“向上转型后,父类也只能调用父类已经有的方法”。但是子类如果覆盖了父类的方法,那么即使向上转型,方法的行为也表现为覆盖后的行为。这也是多态的一种体现。向上转型更多的用来体现一种编程上的“约定”。所有继承某个类或者实现某个接口的类,一定包含某个方法,这样在调用的时候,使得你也不必关系具体的实现细节,只要知道“这个类型中的某个方法能帮我完成工作”就可以了。
3.
向下转型,是“引用的类型”的变化,不是对象实例类型的变化。new什么,就是什么。不会因为向上或者向下转型而改变自己的类型。
4.
最后一个问题,不管向上还是向下转型,调用的都是实际类型中的那个方法。比如,animal
a
=
new
cat(); a.叫()。那这个叫就是cat类型实例中的“叫”方法。
展开全部
哪个说的
如果你需要使用多态,那么就应该向上转型,至于为什么使用多态,什么时候使用,只有自己慢慢琢磨,也不用刻意去琢磨,时间久了,代码量多了,自己慢慢就会有感觉了
向下转型是不安全的,当然,如果你已经确定他是这个子类了,就可以向下转,如果你使用了多态,而又用到了向下转型,那么你可以考虑下你的设计是否有问题了
继承少用,多用实现(不能滥用)
如果你用了向下转型,那么当初是为了什么而向上转型呢?考虑下这个问题。
像反序化就要向下转型为自己的子类,因为反序列化得到的是一个Object
从集合取出元素也要向下转型,你可能说不用呀,那是java帮你做了,泛型都是使用
Object的擦除来实现的。
如果你需要使用多态,那么就应该向上转型,至于为什么使用多态,什么时候使用,只有自己慢慢琢磨,也不用刻意去琢磨,时间久了,代码量多了,自己慢慢就会有感觉了
向下转型是不安全的,当然,如果你已经确定他是这个子类了,就可以向下转,如果你使用了多态,而又用到了向下转型,那么你可以考虑下你的设计是否有问题了
继承少用,多用实现(不能滥用)
如果你用了向下转型,那么当初是为了什么而向上转型呢?考虑下这个问题。
像反序化就要向下转型为自己的子类,因为反序列化得到的是一个Object
从集合取出元素也要向下转型,你可能说不用呀,那是java帮你做了,泛型都是使用
Object的擦除来实现的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
父子对象之间的转换分为了向上转型和向下转型,它们区别如下:
向上转型 : 通过子类对象(小范围)实例化父类对象(大范围),这种属于自动转换
向下转型 : 通过父类对象(大范围)实例化子类对象(小范围),这种属于强制转换
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询