Object类是如何成为所有类的“父亲”?

 
前言

也许大家在刚开始学Java的时候就听说过,Object类是所有的类的父类。但是有没有思考过,为什么我们自己创建的类,没有继承Object类,但是却能调用Object类的方法呢?

 
正文

下面直接看一下截图,分别是自定义类ObjectTest跟Object类。

 

既然我们没有显式继承Object类,也能调用Object类里的方法,那是什么机制可以达到“自动继承”呢?

1.由于我们的Java是运行在JVM之上的语言,所以有一种可能是,我们的编译器在编译代码的时候,如果该类没有继承任何类,它会自动的帮我们在编译的时候加上默认的父类“Object“,若该类有父类了就不作处理,这样一来我们就可以使用Object里面public跟protected的方法了。

2.还有一种可能是,在编译的时候保持原样,只是在运行的时候去判断有没有显式继承其他类,若没有则默认把Object当成自己父类处理。我们可以直接反编译刚才的class文件来一探究竟。

 

 

通过“javap”命令可以看到反编译出来的文件,编译器并没有在编译的时候把“extends Object“添加上去,那么可见是第2种方式实现的。

此时如果你在网上查找资料的话会发现,有些人使用jdk6的时候,反编译出来Java源码会存在“extends Object“。所以我们总结下来,不同的jdk版本实现方式是不一样的,笔者当前的使用的版本是"1.8.0_111"。

 
相关解疑

既然是编译器或者运行期JVM才帮我们做了继承这件事,那为什么我们写代码的时候可以直接用这些方法呢?

答:其实这是IDE帮我们做的处理,默认了类都是继承自Object,才能直接使用里面的方法。

 

如果我自己在类上“extends Object“可以么?

答:当然可以,JVM会判断当前类是否有继承其他类,才开始做后续的处理,但是如果你这么写的话,就不能继承其他类了,Java不支持多继承。

                                                          

喜欢的话,麻烦大家点个赞~关注一下微信公众号《深夜里的程序猿》,每天分享最干的干货

转载于:https://my.oschina.net/19921228/blog/3031727

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值