黑马程序员技术交流社区

标题: 关于接口 [打印本页]

作者: 杨雯雯    时间: 2012-12-23 19:45
标题: 关于接口
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();
}
}
帮忙找错

作者: 王进亮    时间: 2012-12-23 20:38
本帖最后由 王进亮 于 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();
}
}




作者: 刘丰伟    时间: 2012-12-23 21:21
如果你用eclipse的话,他会直接告诉你错误的地方,System.out.println(x)里的x在该类中是没有的,你如果要打印该类继承的父类的x,应该为super.x,老毕视频里有详细的讲解,你看看啊!

作者: 张综    时间: 2012-12-23 22:16
因为你是用的继承,而子类中又没有X这个变量,所以你直接打印X就会报错。解决办法就是指定打印的这个x是父类的。使用super关键字指定打印的这个X是父类的变量X。就好了。
作者: 黄锦成    时间: 2012-12-24 11:28
C:\error.png
在接口和父类中都有x变量,C实现了接口,继承了类,就有了两个x,编译器它分不清楚你调用哪个,即使你自己想要调用接口中的x,但是对于编译器来说,都是一样的。所以不建议使用这种代码




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2