黑马程序员技术交流社区

标题: 笔试时遇到的一个问题,想了好久都没想清楚那儿出的问题 [打印本页]

作者: .Mr    时间: 2013-11-30 21:46
标题: 笔试时遇到的一个问题,想了好久都没想清楚那儿出的问题
本帖最后由 .Mr 于 2013-12-1 10:21 编辑
  1. interface  A{  
  2.   int x = 0;
  3. }
  4. class B{   
  5. int x =1;
  6. }  
  7. class C extends B implements A {   
  8. public void pX(){        
  9. System.out.println(x);  
  10.   }     
  11. public static void main(String[] args) {      
  12. new C().pX();            //编译报错 提示public的问题
  13. }
  14. }
复制代码

作者: 25343215    时间: 2013-11-30 22:01
本帖最后由 25343215 于 2013-11-30 22:07 编辑

如果这样写Sysout(super.x)那么输出的1。
如果这样写Sysout(this.x)那么还将继续报图中的错误 。
在我这里报的错误原因是接口,和父类,都有相同的变量。



图片1.png (10.12 KB, 下载次数: 53)

图片1.png

作者: hurryup    时间: 2013-11-30 22:17
很显然,main类必须public 啊!
作者: 张天昊76    时间: 2013-11-30 22:22
是调用方法时的问题,这样调用,虚拟机是打印哪个的x值呢?
不明确,所以就报错了。
作者: litaojisuanji    时间: 2013-11-30 23:03
我显示的怎么是x错误啊。。。
父类和接口中都有x,调用的不确定性吧。
作者: 汪洋大海    时间: 2013-12-1 00:18
接口中的成员都是常量,也就是说,
interface A
{
  public static final int x =0;
}

Class B 中的x和常量名重复了。

调用两个x的方法如下:
第一个,接口中的常量。A.x
第二个,父类中的变量。super.x

不用谢我,因为我叫雷锋。


作者: .Mr    时间: 2013-12-1 10:07
25343215 发表于 2013-11-30 22:01
如果这样写Sysout(super.x)那么输出的1。
如果这样写Sysout(this.x)那么还将继续报图中的错误 。
在我这 ...

谢谢 我明白了..
作者: .Mr    时间: 2013-12-1 10:08
litaojisuanji 发表于 2013-11-30 23:03
我显示的怎么是x错误啊。。。
父类和接口中都有x,调用的不确定性吧。

3q I get it
作者: .Mr    时间: 2013-12-1 10:10
hurryup 发表于 2013-11-30 22:17
很显然,main类必须public 啊!

我以为C类需要Public 因为主函数是Public 嘛




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2