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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余志强 黑马帝   /  2011-9-29 12:32  /  1412 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

下面程序运行会发生什么结果?如果有错误,为什么?如何改正?
interface  A{
  int x = 0;
}
class B{
  int x =1;
}
class C
    extends B implements A {
  public void pX(){
    System.out.println(x);
  }
  public static void main(String[] args) {
    new C().pX();
  }
}
}

6 个回复

倒序浏览
黑马网友  发表于 2011-9-29 12:46:11
沙发
测试一下,提示如下
对 x 的引用不明确,B 中的 变量 x 和 A 中的 变量 x 都匹配

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-29 12:51:20
藤椅
我认为 c既然继承了B实现了A那么pX()方法中的x到底是谁的呢?两个x都满足呀!你让虚拟机为难了!
回复 使用道具 举报
黑马网友  发表于 2011-9-29 13:02:48
板凳
经过测试,看来我的想法是对的,一楼说的也很正确,引用指向不明确,用父类的在
public void pX(){
    System.out.println(new B().x);
  }
用接口的
public void pX(){
    System.out.println(A.x);
  }
回复 使用道具 举报
黑马网友  发表于 2011-9-29 13:05:52
报纸
java中没有多重继承,C类继承了父类B又实现了A接口,可以看做多重继承,而多重继承可以获得父类以及接口的各种不同的天然属性,但是C的父类的x属性和接口中的x属性名字一样啊,这样pX()方法中引用的x到底是父类的还是接口的呢,我觉得编译器这会儿也迷糊呢吧,是否可以将父类B中的属性换个名字(或者接口中的属性换名字),这样编译器就不会迷糊了吧
回复 使用道具 举报
黑马网友  发表于 2011-9-29 14:04:46
地板
编译会报错,因为   System.out.println(x); 这句话引用的x不明确。改正的办法是把A或B中的x重新命名一下。
回复 使用道具 举报
黑马网友  发表于 2011-9-29 15:22:11
7#
现在明白为什么java为什么不支持多重继承
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马