黑马程序员技术交流社区

标题: 接口问题 [打印本页]

作者: 米大米    时间: 2014-4-15 00:08
标题: 接口问题
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();
   }
}

有什么错误 接口的定义应用怎么解释
作者: ^o(孤8o|狼i¤F    时间: 2014-4-15 00:30
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();
   }
}

在这个类当中  A 和 B 都是 C 的父类
当你用  C  的对象 去调用 打印X 值时候  A 中有X B中有X 然而 C 的对象去调用 输出X 虚拟机 发现了两个X 不知道去调用谁   所以 这个程序会出现错误

接口其实就是一个特殊的抽象类 同样充当子类的父类
作者: faith    时间: 2014-4-15 08:50
^o(孤8o|狼i¤F 发表于 2014-4-15 00:30
interface  A{
   int x = 0;
}

同学 你觉得这段程序该如何改呢?
作者: ^o(孤8o|狼i¤F    时间: 2014-4-15 08:57
修改其中一个变量名即可
作者: 米大米    时间: 2014-4-15 11:41
^o(孤8o|狼i¤F 发表于 2014-4-15 08:57
修改其中一个变量名即可

怎么修改变量名呢   一个是接口 一个是类  继承类  引用接口 都没有错  你说的改变量名是将其中一个X该为y,这样么?
作者: demown    时间: 2014-4-15 12:22
this  你去看看this 的使用吧 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();
    }
}



你找个两个个类中都有x 。虚拟机不知道你要调用的是哪个x ,虚拟机就报错了呗。比喻一个吧 就是说   你学java 你在李老师这里学习,又在张老师那里学习java。都是学习java 但是张老师和李老师讲的思想并不会相同。当你想用老师的思想的时候 两个java思想都叫X.当你对别人说我要调用X思想的时候  那请问你要说出哪个老师的思想。因为是常量 所以必须标示才可以。也就是 接口名.常量 。其实你理解this,这个就能理解了就是必须告诉别人你用的是哪个常量 。 如果是方法重名的话你就直接覆盖就可以了(也就是实现)。去看看接口定义吧。
作者: ^o(孤8o|狼i¤F    时间: 2014-4-16 11:26
米大米 发表于 2014-4-15 11:41
怎么修改变量名呢   一个是接口 一个是类  继承类  引用接口 都没有错  你说的改变量名是将其中一个X该为 ...

就是这个意思

作者: wyqs92    时间: 2014-4-17 20:26
出现了调用的不确定性。你要输出的是X,但是是输出A中的X,还是B中的呢?




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