新大陆发现:接口与Object的讨论

1、启航(公元2009年大年初二22:51:08):

 

 

 

 编译器过程大致如下(细节过程略):

 从main方法开始, 在堆空间里创建类B的对象,然后栈空间里分配一个类型为A的引用;

 接下来返回B类对象的堆空间地址给A的引用,这样一来A的引用就指向B的对象

 A test = new B();

 

接下来在编译期,编译器首先检查接口A中是否有print方法,如果没有报错

接口A中未声明print方法,故test.print(); 会报错  

 

2、中途遇险(公元2009年大年初二23:21:17):

 

 

问题的发现: 接口A的引用调用了Object类中的方法

首先,接口是无法继承类的,所以接口和Object是相对独立的,但是这里存在

一个问题就是接口A的引用为什么可以调用Object中的方法呢?

 

 

3、险中生还(公元2009年大年初二23:43:54)

 

 问题解释:

 接口A中既然不能继承类Object,但是并不能证明接口A里没有声明Object中的

 同名方法,也就是说接口A中有一套跟Object类中同名的抽象方法,这就能够

 解释的通为什么接口A的引用能够调用Object类中的方法,但是考虑到可重用性

 所以有个隐藏的接口里面声明了Object类中的所有的方法,而接口A隐式的

 继承了这个隐藏的接口,这样一来凡是接口都有一套Object类中的相同的方法。

 接下来分析一下,接口A调用了Object中的方法,具体情况如下:

 

 在编译期,如上所说接口A里面继承了隐藏的接口,那么toStsring()方法也在接口

 A声明,这些一系列动作只不过是由编译器来完成。既而能在A中找到toString()方

 法,从而编译期不会报错。

 在运行期,因为每个类都继承了Object,那么类B就继承了Object里面的方

 法,由于多态机制,接口A的引用会调用实现类B里面的toString方法。

 

4、成功登陆(公元2009年大年初三0:11:21)

 

问题解释的验证:

 

 

 

 在编译期,首先看看接口A是否有print方法没(没有报错),然后在看看它的实现

 类C里有没有实现接口A里的所有方法(没有也报错),因为类C继承了类B,

 那么类C也就有了print方法,故没有报错

 在运行期,因为实现类C继承了类B,所以会调用类B里面的方法

 

5、发现新大陆(公元2009年大年初三00:49:20) 

 

 总结:

 

       通过上面的验证,可以得出以下结论:

 厂家A 制定了一套图纸,车子有轮子, 那么这个任务就交给厂家C来实现,

而厂家C是直接把这个实现交给已经实现好"轮子"的厂家B,那么厂家C只需要

直接跟厂家B达成一定的协议(即继承B就可以了)就可以拥有该实现好的"轮子",

而不需要自己在去制造轮子(除非对厂家B的轮子有新得改进,即java中的重写)。

 

以上属个人理解,如有问题请加 QQ:472854157(四明狂客)

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值