搜索
当前位置: sk彩票 > 对象型方法 >

java多态向上转型向下转型的问题

gecimao 发表于 2019-07-01 13:56 | 查看: | 回复:

  dog是animal的子类,animal里只有一个“吃”的方法,dog类里有“吃”和“叫”两个方法。当向上转型时,Animala=newCat();问题1:这个过程叫做父类引用指向子类对象?为什么不叫做子类...

  dog是animal的子类,animal里只有一个“吃”的方法,dog类里有“吃”和“叫”两个方法。当向上转型时,

  问题1:这个过程叫做父类引用指向子类对象?为什么不叫做子类引用指向父类对象呢?

  问题2:子类继承父类可以使子类的功能更强大。而向上转型后,父类也只能调用父类已经有的方法,而不能调用子类新增加的功能啊,多态还有什么用呢?这一点也好理解,子类知道哪个是他的父类,但父类不会知道哪个类是他的子类,所以不能调用父类中没有的方法。

  对于我上面的问题,可不可以这么来解释:因为子类可以重写父类中的方法,向上转型时,父类可以调用子类中重写过的方法,这样 间接的也扩充了父类的功能。我这么理解对吗?

  问题3:向下转型就是Animal a = new Cat(); Cat c = (Cat) a; 可不可以理解为:父类的对象强制转换成子类的类型(Cat型),然后赋给子类的对象,完成向下转型。这样的话子类对象(c)既可以调用吃的功能,又能调用“叫”的功能。这样也扩充了父类的功能。

  以上是我看了一下午多态后自己的一点理解,语言说的比较通俗吧。求大神看看我理解的有什么问题,哪句话说的有问题。看我打了这么多字,您也别复制粘贴了,回答得好的小弟20分送上,谢谢~!

  再补充下:向下转型时,子类对象c调用的方法是父类的还是子类的呢??可能我没写参数,这个例子举的比不那么好。将就看下吧~展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  引用a的类型是Animal,是Cat的父类。所以是“父类引用指向子类对象”。如果是“子类引用指向父类对象”,那应该写成 Cat a = new Animal();但这显然是不和逻辑的。

  你说的没错——“向上转型后,父类也只能调用父类已经有的方法”。但是子类如果覆盖了父类的方法,那么即使向上转型,方法的行为也表现为覆盖后的行为。这也是多态的一种体现。向上转型更多的用来体现一种编程上的“约定”。所有继承某个类或者实现某个接口的类,一定包含某个方法,这样在调用的时候,使得你也不必关系具体的实现细节,只要知道“这个类型中的某个方法能帮我完成工作”就可以了。

  向下转型,是“引用的类型”的变化,不是对象实例类型的变化。new什么,就是什么。不会因为向上或者向下转型而改变自己的类型。

  最后一个问题,不管向上还是向下转型,调用的都是实际类型中的那个方法。比如,Animal a = new Cat();a.叫()。那这个叫就是Cat类型实例中的“叫”方法。

  问题1 : 类是一个java 基本程序文件, 对象是 一个java 类的 实体化(已分配了内存等资源)

  这里面 a 本质上是子类对象,其 执行 吃 方法时,依然执行的是 Cat 的方法,而不是 父类 Animal 的方法。这种方式可以完成工厂模式等很多功能。

  这样的好处是: 你传给 fun 方法的是 Cat 也好,Dog 也好,都会执行吃的方法,唯一的不同时 传 Cat 执行的是 Cat 方法,Dog 执行 dog 方法,

  int 转 long跟 鸟类是父类,麻雀是子类 完全没有关系,因为 int long都是java中的基础数据类型,比如int型转long型,因为long型范围包括了int型所有范围,因此long可以包含int, 如果强制将long转成int的话,就会失去精度,因为 int 是32位 long是64位。

本文链接:http://moodyjews.net/duixiangxingfangfa/755.html
随机为您推荐歌词

联系我们 | 关于我们 | 网友投稿 | 版权声明 | 广告服务 | 站点统计 | 网站地图

版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright @ 2012-2013 织梦猫 版权所有  Powered by Dedecms 5.7
渝ICP备10013703号  

回顶部