黑马程序员技术交流社区
标题:
一道练习题,它说编译会有问题,怎么看出来
[打印本页]
作者:
superob123
时间:
2014-5-31 22:29
标题:
一道练习题,它说编译会有问题,怎么看出来
就这道题
interface A
{
int x=1;
}
class B
{
int x=2;
}
class C extends B implements A
{
public static void main(String[] args)
{
System.out.println(x);
}
}
复制代码
这代码有什么问题,求高手解答。
作者:
松涛小玮
时间:
2014-5-31 22:34
因为在接口中的全局变量默认都是public static final ;就算你在接口中写了int x=1;实际上定义的还是public static final int x=1;因为有final关键字,所以变量x的值是不可以被修改的。但是你继承了类B,也继承了一个x变量,且值与接口定义的不同,所以就会报错。修改错误的方法就是:将其中一个变量x改成任何其他字母。否则你再程序中使用x变量时,程序根本不知道你要使用的是接口的x变量还是继承的类的x变量
作者:
Lex
时间:
2014-5-31 22:34
大神,你的main放在C类里,JVM怎么找到执行的入口呢?很明显的错误啊,版主加个分吧,一天没加分了........:Q
作者:
葛晓东
时间:
2014-5-31 22:38
你把main函数 写到C类中,怎么会运行啊?
作者:
黎志勇
时间:
2014-5-31 22:57
把B类的成员变量x改成其他可用名;
interface A
{
int a=1;
}
class B
{
int x_another=2;
}
class C extends B implements A
{
public static void main(String[] args)
{
System.out.println(x);
}
}
复制代码
或者把接口A里面的变量x改成其他可用名,同时在B声明变量x的时候,加上静态变量标识符“static”。
interface A
{
int a=1;
}
class B
{
static int x=2;
}
class C extends B implements A
{
public static void main(String[] args)
{
System.out.println(x);
}
}
复制代码
作者:
黑马粉、峥
时间:
2014-5-31 23:08
你这代码是出问题的,因为你的主函数C 继承了class B 实现了 接口 A,但是他们类里面都有 变量 x,接口里面变量都被 public static final修饰 成为常量不可被修改,所以当你运行主函数调用 变量x 的时候 ,JVM就不知道指向哪个里面的x ,所以就会出现程序报错。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2