注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Reloadbug

黑夜给了我黑色的眼睛,我用她寻找Bug

 
 
 

日志

 
 

关于Java中接口定义的趣事  

2007-01-09 13:09:17|  分类: Java |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    今天又各朋友问我一个非常有趣的问题:java中如果有两个接口A和B它们都定义了一个方法get(),但是它们的返回值一个是 void 一个是 int 。然后用一个类来同时实现两个接口会发生什么事呢?如果两个接口都定义了变量名为 a 的int 变量会怎么样呢?

    问题很有趣,但是只要明白java 中接口的含义就可以一一解答了。首先接口是一个功能表,每一个方法定义代表一个功能的需求。同样重要的还有对每个方法的注释解释。如果实现方法的人只知道方法的定义却不清楚这个功能 具体做什么,那么实现方法的人是没法正确的实现功能的。

    作一个形象的比喻:如果我要开一家 肯德基 的分店,肯德基 会给我一份合同,象下面这样。

    1 。统一制服。所有员工都必须穿戴 肯德基 的统一制服。
    2 。随手清洁。所有的员工在看到需要清洁的地方应主动进行清理。
    3 。收费统一。所有的商品价格都必须与 肯德基 的规定价位相同,不得随意修改。

    看,每一条就好比是方法的定义和方法的注释,我只要根据合同中的规定一一做到我就拥有了一家肯德基餐厅了。

    回到java上来,定义接口的目的是要让别人来实现。方法的定义一定要清晰并能反映方法的功能。也就是说如果两个接口需求的功能相同,那么它们也应该有相同的方法定义。等等,为什么方法的定义要相同呢?我就是要让他们有不同的返回类型。是的,您完全可以这样做,但是你会发现如果有一个类同时实现这两个接口编译器就不会放过你。它不会让你编译功能不明确的方法。

    就像要在一个类里定义两个名字,参数列表完全相同的方法,但是他们的返回类型不同。这是绝对不允许的,他们的返回类型不同,也意味着它的功能是不同的,至少是有一些微妙的不同。那么在他们的参数列表和名字上也应该有些不同。如果单独考虑两个接口是不会有问题的,但是这样做是不好的。

    是不好,而不是不可以。可以说这样做为一个类同时实现它们埋下了隐患。

    另一个问题:相同的变量名。应该很好理解了。接口中定义的变量全部是隐含的 public static final 。当你使用其中一个变量时直接写 接口名.变量名 如:A.a。就像一般的静态变量一样。

  评论这张
 
阅读(604)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017