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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨雯雯 中级黑马   /  2012-12-23 19:45  /  1322 人查看  /  4 人回复  /   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();
}
}
帮忙找错

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
本帖最后由 王进亮 于 2012-12-23 20:56 编辑

interface A {
        int x = 0;
}
class B {
        int x = 1;
}
public class C extends B implements A {
        public void pX() {
                System.out.println(super.x);//当本类没有此变量时,它会往上一级查找,你要指定,打印的是哪一个x。不指定的话,会有冲突。
                System.out.println(A.x);
        }
        public static void main(String[] args) {
                new C().pX();
        }
}
因为接口里面的常量,可以通过类名即A.x调用,父类的调用要用super
如果实现的父类和接口中的变量没有冲突时可以
interface A {
int w = 0;
}
class B {
int x = 1;
}
public class C extends B implements A {
public void pX() {
  System.out.println(x);
  System.out.println(w);
}
public static void main(String[] args) {
  new C().pX();
}
}



评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
如果你用eclipse的话,他会直接告诉你错误的地方,System.out.println(x)里的x在该类中是没有的,你如果要打印该类继承的父类的x,应该为super.x,老毕视频里有详细的讲解,你看看啊!
回复 使用道具 举报
因为你是用的继承,而子类中又没有X这个变量,所以你直接打印X就会报错。解决办法就是指定打印的这个x是父类的。使用super关键字指定打印的这个X是父类的变量X。就好了。
回复 使用道具 举报
C:\error.png
在接口和父类中都有x变量,C实现了接口,继承了类,就有了两个x,编译器它分不清楚你调用哪个,即使你自己想要调用接口中的x,但是对于编译器来说,都是一样的。所以不建议使用这种代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马