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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黄锦成 于 2013-1-28 19:52 编辑

interface      S1
{
       int x = 0;
}
class B
{
       int x =1;
}
class C extends B implements S1
{
       public void pX()
{
        System.out.println(x);
     }
       public static void main(String[] args) {
          new C().pX();
       }
}
为什么输出为0

8 个回复

倒序浏览
没结果的吧.....2个的平级的东西 就好像你能在 同一个方法中 int x=0 int x=0???

未命名.jpg (10.79 KB, 下载次数: 35)

未命名.jpg

点评

是的,这个题目有是有问题的,下面我有解答  发表于 2013-1-27 21:21
回复 使用道具 举报
本帖最后由 luck28 于 2013-1-27 20:18 编辑

接口中默认修饰是public static final
所以接口中的是常量,而不是变量。

1)super.x 应该是可以调用到父类的。
2)接口中的是静态常量,用S1.x(即接口名.常量名)可以调用

点评

说的好明确  发表于 2013-1-28 22:59
哥们牛啊 这个是经常犯的错误,所以拿出来和大家分享分享  发表于 2013-1-27 21:21
回复 使用道具 举报
这个编译都过不了。编译器分不出x是哪个x
回复 使用道具 举报
哈哈,这就是大家常见的一个错误,拿出来和大家看一下。
     这个题目是错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时import java.util和java.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确(输出的是1),而接口的属性默认隐含为 public static final.所以可以通过A.x来明确(输出的是0)。

希望对大家有帮助!
回复 使用道具 举报
黄锦成 发表于 2013-1-27 20:55
这个编译都过不了。编译器分不出x是哪个x

是的,编译出错的。版主就是牛!
这个题目是错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就
是未明确的x调用,两个x都匹配(就象在同时import java.util和java.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确(输出的是1),而接口的属性默认隐含为 public static final.所以可以通过A.x来明确(输出的是0)。

回复 使用道具 举报
pzfpang449 发表于 2013-1-27 21:20
是的,编译出错的。版主就是牛!
这个题目是错误。在编译时会发生错误(错误描述不同的JVM有不同的信息, ...

:shutup:这个我是用eclipse工具写的。它直接提示错误,错误信息是“x模拟两可”
回复 使用道具 举报
黄锦成 发表于 2013-1-27 21:30
这个我是用eclipse工具写的。它直接提示错误,错误信息是“x模拟两可” ...

呵呵,eclipse本身就是排错的工具嘛
回复 使用道具 举报
亲,你这个输出的X是变量,如果想输出X应该是System.out.println("x");
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马