关于上转型对象的一个问题

qq_35120304 2016-07-10 03:06:15
这句话中的②说该子类又具备了所有功能,那之前又没有什么功能呢?父类对子类对象上转型后,难道子类对象就不能调用自己新增的方法了么?
...全文
690 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
darlingdandan 2019-04-07
  • 打赏
  • 举报
回复
想问一下你的书是哪本书鸭
Zip Zou 2016-08-31
  • 打赏
  • 举报
回复
这很容易理解啊,上转型指的是:将子类的引用赋值给基类的对象,此时操作都是使用基类这个对象去执行的,对于基类而言,它的类型还是基类类型,因此它只能访问到基类所公开的方法和属性。但是由于多态性,在执行被子类重写的方法时,它会调用子类的方法。 还可以从C++的角度来理解,在C++中,也是存在向上转型的,将子类的指针交给父类的指针变量,从而使用父类的指针变量来操作子类从父类集成的方法,因为对于子类的指针变量来说,子类变量只对子类的方法可见。 从内存上来讲,可以这样理解,子类是对父类的扩展,他会增加父类所没有的东西,那么它再堆区所申请到的内存空间是比父类要打大的,而将子类赋值给父类,是只把子类和父类重合的部分交给了子类,多出来的部分是子类的扩展,并且对父类而言,他的空间是访问不到那多出去的部分的。
sky_08_06_02 2016-08-16
  • 打赏
  • 举报
回复
向上转型时为父类时候,只能调用父类的方法与属性,当然父类方法被重写时,调用子类的方法;但是不能调用某个子类特有的方法; 多态
Be_nurturing 2016-07-11
  • 打赏
  • 举报
回复
引用 4 楼 qq_35120304 的回复:
[quote=引用 3 楼 Be_nurturing的回复:]最后一行改一下f.playGame();
你没有理解我的意思啊 你仔细看看②那句话[/quote] ②那句貌似是在向下转型一次 (强制转换) Zi z = (Zi) f ,然后就可以调用子类的变量和方法
  • 打赏
  • 举报
回复
这属于非常基础的问题,建议看看马士兵讲j2se部分的视频,虽然有点老了但基础讲的很好,而且会画内存图,图一画出来你就清楚了,真心推荐。
原味紅豆 2016-07-11
  • 打赏
  • 举报
回复
向上转型时。就是多态,子类方法被抛弃,只能执行父类的方法,或者是重写的子类方法。只需记住,编译的时候类型是什么就可以了,因为编译类型是父类,所以只能有父类的属性,方法也是父类的
qq_35120304 2016-07-10
  • 打赏
  • 举报
回复
引用 3 楼 Be_nurturing的回复:
最后一行改一下f.playGame();
你没有理解我的意思啊 你仔细看看②那句话
Be_nurturing 2016-07-10
  • 打赏
  • 举报
回复
最后一行改一下f.playGame();
Be_nurturing 2016-07-10
  • 打赏
  • 举报
回复
class Fu{ void eat(){ System.out.print("父类吃饭"); } } class Zi extends Fu{ void playGame{ System.out.print("打游戏"); } //重写父类的吃饭 void eat(){ System.out.print("子类吃饭"); } } public TestDemo { public static void mian(String[] args ){ Fu f = new Zi()//向上转型(多态:父类引用指向子类对象) //向上转型,父类中没有打游戏的方法,调用会报错 f.playGame(); //如果子类中没有eat()的方法,就可以调用继承在父类的方法, f.eat(); //输出====父类的吃饭 //如果子父类中同时有eat(),就会调用子类的的吃的方法 // 输出====子类的吃饭 //子类调用自己的打游戏的方法 Zi f = new Zi() //创建子类对象 //这样是可以的,子类调用自己的方法, f. f.playGame(); } }
qq_35120304 2016-07-10
  • 打赏
  • 举报
回复
还有大神吗

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧