有关java语法的一个小细节疑惑

tg008007x3 2010-10-22 02:07:40
interface A{
int x=10;
}
class B{
int x=11;
}
public class Test extends B implements A{
//public static int x=12;
public static void main(String[] args) {

System.out.println(x);//编译器报错,有歧义!编译器无法自动判断有限调用哪个

}
}
以上编译器为什么会报错呢?Test中的静态main方法只能看见自己静态的和父类以及接口中的一些静态量,这个时候应该直接打印10啊,为什么会报错呢?父类中的非静态变量和接口中的静态常量重复定义也没什么错啊?请问编译器是怎么思考,怎么判断的?希望知道的高手详细的说明下!谢谢!
...全文
234 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
接口是抽象类 并且你的父类中的变量还是同名的 你这样会导致编译器不知道要调用那个父类的变量
nine_suns99 2010-10-23
  • 打赏
  • 举报
回复
改成这样就可以了

interface A{
int x=10;
}
class B{
static int x=11;
}
public class Test extends B implements A{
//public static int x=12;
public static void main(String[] args) {

System.out.println(x);//编译器报错,有歧义!编译器无法自动判断有限调用哪个

}
}
nine_suns99 2010-10-23
  • 打赏
  • 举报
回复
从接口A中继承下来的x是对象属性,main方法中只能看到类属性,所以报错
tmhk123 2010-10-23
  • 打赏
  • 举报
回复
学习了
每天回帖即可获得10分可用分!
ETCentury 2010-10-22
  • 打赏
  • 举报
回复
学习了,10分到手~!
zbo 2010-10-22
  • 打赏
  • 举报
回复
Test中的静态main方法只能看见自己静态的和父类以及接口中的一些静态量。

这个是不对的,可以看到父类的非静态量。可以在父类里增加个新变量试试。
JACKINZHUHAI 2010-10-22
  • 打赏
  • 举报
回复
按照编程习惯,内,外部类中,就不应该有同名的变量。
dinglimin2009 2010-10-22
  • 打赏
  • 举报
回复
关注 学习啊
c439253412c 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 tg008007x3 的回复:]
interface A{
int x=10;
}
class B{
int x=11;
}
public class Test extends B implements A{
//public static int x=12;
public static void main(String[] args) {

System.out.println(x);//编译器报错,有歧义!……
[/Quote]编译报有歧义的错误。
撿烬寒枝 2010-10-22
  • 打赏
  • 举报
回复
这个就是代码有问题,编译器无法选择!!
liwutao 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liwutao 的回复:]
main方法可以看见父类的非静态变量,静态和非静态都能找到。
不能调用非静态变量
当虚拟机在类中找x变量的时候当然会有两个了。
[/Quote]

虚拟机不会智能地根据变量是否静态变量进行筛选。
liwutao 2010-10-22
  • 打赏
  • 举报
回复
main方法可以看见父类的非静态变量,静态和非静态都能找到。
不能调用非静态变量
当虚拟机在类中找x变量的时候当然会有两个了。

伊森有你 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 keeya0416 的回复:]
两个变量同名且都是 test 的父级的
编译器不知道用哪个啊

如果是
B extends A
Test extends B

就会就近调用 B 中的
[/Quote]
学习
keeya0416 2010-10-22
  • 打赏
  • 举报
回复
两个变量同名且都是 test 的父级的
编译器不知道用哪个啊

如果是
B extends A
Test extends B

就会就近调用 B 中的

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧