4-4编程中的问题

4-4编程中的问题

麻烦老师,这条逻辑链是怎么一回事?解释一下,谢谢!

   问题如下:

http://img1.sycdn.imooc.com//climg/5c2e22870001ff2307810309.jpg

在这个创建实例的过程中,将是一个Shape的引用指向了一个Shape的子类Circle,属于向上转型,按道理是无法调用子类自己的area()方法,除非向下转型,但是很奇怪,没有向下转型,这里居然能调用子类自己的area()方法,是因为父类是抽象类,而抽象类当中的抽象方法是不允许有具体抽象方法,是因为抽象类中的抽象方法,没有具体的方法体,所以这才无奈指向了子类的area()方法,

http://img1.sycdn.imooc.com//climg/5c2e23f70001e57707830229.jpg

http://img1.sycdn.imooc.com//climg/5c2e23f70001fc9b07880481.jpg





正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

6回答
未久丶 2019-01-17 13:43:35

同学你好,子类中的area()方法是重写父类中的area()方法,所以可以调用

Fuller_Jia 2019-01-09 10:26:49

其实多态性,核心是类与实例的关系不对等。我们得从内存去理解类和实例的关系,类型是父类(Shape),而是实例化时使用子类(Circle)的构造方法,内存上实际开辟的是子类的内存空间,那么当我们去调用某个方法时,会通过类型去判断有没有这个方法(这里就是看Shape有没有定义area()这个方法),而通过实例去运行这个方法,也就是通过circle实例的内存中取这个area()方法,所以最终结果是调用了子类的area()。

重新看一边视频吧, 同学

qq_白烛葵_fuyBHT 2019-01-07 13:07:17

向上转型可以调用实例化的子类重写父类的方法

chrismorgen 2019-01-06 14:56:47

你好同学,你说的是下图这种调用方法吗?如果是,这种是方法时可以的呀,父类的引用指向了子类的实例,c是可以调用子类中的方法呀。请问同学是哪点有疑问呢?祝学习愉快~

http://img1.sycdn.imooc.com//climg/5c31a626000113bc03710091.jpg

好帮手慕阿满 2019-01-04 12:10:41

同学你好,这里的Shape是抽象类,类中有抽象方法area,两个子类继承了Shape类并实现了area()方法,Shape类不能实例化,Shape rec=new Rectangle(6,5);Shape cir=new Circle(3);指向子类的实例,会根据实例化的对象去调用具体的实现方法。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快!

  • 提问者 慕慕2644381 #1
    Shape类不能实例化,个Shape的引用指向了一个Shape的子类Circle,属于向上转型,按道理是无法调用子类自己的area()方法,但是子类居然能调用子类自己的area()方法?这是为什么??
    2019-01-04 22:38:32
  • 心字香烧 回复 提问者 慕慕2644381 #2
    同学你好 前面的课程中 讲的是向上转型 在向上转型的时候 父类引用指向子类的实例化 这个时候 其实是可以调用子类重写的父类的方法的 ,你所说的是不能调用子类自己独有的方法 这个子类独有的方法 是不包括子类重写的父类的方法的,也就是说 重写的方法 在向上转型的时候是可以调用的 因为父类中有这个方法了 只是子类重写了而已 独有的方法的意思是在父类中没有的方法(不是被重写的那个方法) 这个疑惑我也有过 不懂的话可以再问我
    2019-01-11 16:32:56
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师