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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 米大米 中级黑马   /  2014-4-15 00:08  /  1234 人查看  /  7 人回复  /   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 收起 理由
czwanglei + 1

查看全部评分

7 个回复

倒序浏览
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 不知道去调用谁   所以 这个程序会出现错误

接口其实就是一个特殊的抽象类 同样充当子类的父类

评分

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

查看全部评分

回复 使用道具 举报
^o(孤8o|狼i¤F 发表于 2014-4-15 00:30
interface  A{
   int x = 0;
}

同学 你觉得这段程序该如何改呢?
回复 使用道具 举报
修改其中一个变量名即可
回复 使用道具 举报
^o(孤8o|狼i¤F 发表于 2014-4-15 08:57
修改其中一个变量名即可

怎么修改变量名呢   一个是接口 一个是类  继承类  引用接口 都没有错  你说的改变量名是将其中一个X该为y,这样么?
回复 使用道具 举报
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,这个就能理解了就是必须告诉别人你用的是哪个常量 。 如果是方法重名的话你就直接覆盖就可以了(也就是实现)。去看看接口定义吧。

评分

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

查看全部评分

回复 使用道具 举报
米大米 发表于 2014-4-15 11:41
怎么修改变量名呢   一个是接口 一个是类  继承类  引用接口 都没有错  你说的改变量名是将其中一个X该为 ...

就是这个意思
回复 使用道具 举报
wyqs92 中级黑马 2014-4-17 20:26:21
8#
出现了调用的不确定性。你要输出的是X,但是是输出A中的X,还是B中的呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马