Java基础

WJB08223 2014-10-22 10:22:42
为什么当一个Object类型的变量指向一个子类引用时,如果调用子类的方法需要类型转换,而自己写的代码 父类的变量指向子类的对象,可以直接调用子类的方法呢?
...全文
296 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
村夫大胡子 2014-10-24
  • 打赏
  • 举报
回复
Object oj = new SubClass(); (SubClass)oj.subMethod(); //转换后调用方法 SuperClass sc = SubClass(); sc.subMethod(); //直接调用方法 不知道你是不是这个意思。如果是。那么。。。 你觉得Object对象会有子类SubClass的subMethod方法吗?如果没有,那么它怎么调用,这个是编译期错误 而在SuperClass与SubClass之间,肯定有重写SubMethod方法,所以SuperClass是有这个方法的,那么父类SuperClass就可以调用,但是它最终调用的,还是子类重写的SubMethod方法,为什么?因为运行期时,会定位到实际类型,然后动态连接到实际类型的方法
rtrththg 2014-10-24
  • 打赏
  • 举报
回复
引用 4 楼 BeardedJ 的回复:
Object oj = new SubClass(); (SubClass)oj.subMethod(); //转换后调用方法 SuperClass sc = SubClass(); sc.subMethod(); //直接调用方法 不知道你是不是这个意思。如果是。那么。。。 你觉得Object对象会有子类SubClass的subMethod方法吗?如果没有,那么它怎么调用,这个是编译期错误 而在SuperClass与SubClass之间,肯定有重写SubMethod方法,所以SuperClass是有这个方法的,那么父类SuperClass就可以调用,但是它最终调用的,还是子类重写的SubMethod方法,为什么?因为运行期时,会定位到实际类型,然后动态连接到实际类型的方法
+1
IT丶小青年 2014-10-23
  • 打赏
  • 举报
回复
子类继承父类、子类调用父类的方法实际上是子类通过子类构造器调用父类的方法,每个类都会有一个无参的构造器,构造器中的super()方法调用父类。
fso918 2014-10-22
  • 打赏
  • 举报
回复
亲,那是因为子类是重写了父类的方法,虽然实际上运行时调用的还是子类的方法,但是在编译的时候,编译器认为调用的还是父类的方法。所以编译器不会报错。 而你说的Object,那是因为Object类里面没有子类的方法,所以直接调用子类方法编译器会报错,需要强制类型转换。
Magical茏 2014-10-22
  • 打赏
  • 举报
回复
父类的变量指向子类的对象,可以直接调用子类的方法呢? 错误 楼主把你代码贴上来

62,620

社区成员

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

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