A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王晓东 初级黑马   /  2012-6-5 15:11  /  1526 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. interface Interface1 {
  2.         public String name = "interface1";
  3. }
  4. interface Interface2 {
  5.         public String name = "interface2";
  6. }
  7. class Impl implements Interface1, Interface2 {

  8. }

  9. @Test
  10. public void test03(){
  11.         Impl impl = new Impl();
  12.         System.out.println(impl.name);  //<font color="red">编译出错,为什么?</font>
  13. }
复制代码
还有,如果上面的代码可以通过编译的话,那么访问的是Interface1中的name字段呢还是访问的是Interface2中的name字段呢?
求解

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

4 个回复

倒序浏览
首先告诉楼主两点:
1. 接口中的字段,即使你不加任何修饰符,它也是public static final的
2. 接口中的方法,即使你不加任何修饰符,它也是public abstract的

楼主的写法,我看着真是别扭呀。你想访问哪个接口中的字段就直接用接口调用呀。
比如Interface1.name就是访问Interface1中的name字段,同样Interface2.name就是
访问Interface2中的name字段。

希望对楼主有用。

评分

参与人数 1技术分 +1 收起 理由
赵志勇 + 1 赞一个!

查看全部评分

回复 使用道具 举报
呃,你问的问题本身就矛盾。。。要是能编译通过访问的是哪一个name,它就不能编译通过,因为他们两个就不可能同时存在。。。。
回复 使用道具 举报
楼主的意思是建立对象后看输出哪一个  是吗?
你的代码通不过啊

个人理解接口都是抽象的
需要类来实现.
回复 使用道具 举报
这个问题类似一个类实现了两个接口中的同名但返回值不同的方法,这种情况就很少,在编程时要尽量避免,所以多个接口中的字段和方法不要重名。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马