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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

就这道题
  1. interface A
  2. {
  3.      int x=1;
  4. }

  5. class B
  6. {
  7.      int x=2;
  8. }

  9. class C extends B implements A
  10. {
  11.      public static void main(String[] args)
  12.       {
  13.            System.out.println(x);
  14.      }
  15. }
复制代码


这代码有什么问题,求高手解答。

5 个回复

正序浏览
你这代码是出问题的,因为你的主函数C 继承了class B 实现了 接口 A,但是他们类里面都有 变量 x,接口里面变量都被 public static final修饰 成为常量不可被修改,所以当你运行主函数调用 变量x 的时候 ,JVM就不知道指向哪个里面的x ,所以就会出现程序报错。
回复 使用道具 举报
把B类的成员变量x改成其他可用名;
  1.     interface A
  2.     {
  3.          int a=1;
  4.     }

  5.     class B
  6.     {
  7.          int x_another=2;
  8.     }

  9.     class C extends B implements A
  10.     {
  11.          public static void main(String[] args)
  12.           {
  13.                System.out.println(x);
  14.          }
  15.     }
复制代码

或者把接口A里面的变量x改成其他可用名,同时在B声明变量x的时候,加上静态变量标识符“static”。
  1.     interface A
  2.     {
  3.          int a=1;
  4.     }

  5.     class B
  6.     {
  7.         static int x=2;
  8.     }

  9.     class C extends B implements A
  10.     {
  11.          public static void main(String[] args)
  12.           {
  13.                System.out.println(x);
  14.          }
  15.     }
复制代码

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报 1 0
你把main函数  写到C类中,怎么会运行啊?
回复 使用道具 举报 1 0
大神,你的main放在C类里,JVM怎么找到执行的入口呢?很明显的错误啊,版主加个分吧,一天没加分了........:Q
回复 使用道具 举报 1 0
因为在接口中的全局变量默认都是public static final ;就算你在接口中写了int x=1;实际上定义的还是public static final int x=1;因为有final关键字,所以变量x的值是不可以被修改的。但是你继承了类B,也继承了一个x变量,且值与接口定义的不同,所以就会报错。修改错误的方法就是:将其中一个变量x改成任何其他字母。否则你再程序中使用x变量时,程序根本不知道你要使用的是接口的x变量还是继承的类的x变量

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 赞一个!

查看全部评分

回复 使用道具 举报 2 0
您需要登录后才可以回帖 登录 | 加入黑马