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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 心的方向 中级黑马   /  2013-11-23 21:31  /  1410 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


interface Utility{}
class Phone implements Utility
{
        public void use()
        {
                System.out.println("using phone");
        }
}
public class Test
{
        public static void main(String[] args)
        {
                Utility u = new Phone();
                u.use();
        }
}

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 今天加分已达上限,请明天再来试试~.

查看全部评分

6 个回复

倒序浏览
接口里没有方法,你调什么
回复 使用道具 举报
我不是new的一个类吗,生成了一个实例啊?
回复 使用道具 举报
你的Utility接口里面没有任何方法。
你这里犯了个错误,混淆了实现接口和继承类的概念。
实现接口是指在接口中有抽象方法,用一个类将这个接口中的抽象方法都实现了。
而继承的话,父类中可以没有子类中的方法。
你的问题改成下面的这段代码就ok了
  1. interface Utility
  2. {
  3.         void use();
  4. }
  5. class Phone implements Utility
  6. {
  7.         public void use()
  8.         {
  9.                 System.out.println("using phone");
  10.         }
  11. }
  12. class Test
  13. {
  14.         public static void main(String[] args)
  15.         {
  16.                 Utility u = new Phone();
  17.                 u.use();
  18.         }
  19. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 赞一个!

查看全部评分

回复 使用道具 举报
多态中成员方法的编译运行规则是:编译看左边,运行看右边,
也就是 Utility u = new Phone();的左右,左边为父接口,但是你的接口里
没有该方法的声明,因此编译会出错。

你在接口中声明个抽象方法
interface Utility
{
        void use();
}

就可以了。
回复 使用道具 举报
你的这句话:Utility u = new Phone();,其中Utility是一个接口,Phone类实现了这个接口,你这是多态。接口型引用指向子类对象,不能调用子类中的特有方法。你的use()方法只在Phone类中有,而接口中没有。所以编译错误。你可以在接口中添加use()方法,也可以把代码改成:Phoneu = new Phone();就没有问题了。你试试。
回复 使用道具 举报
FFF 金牌黑马 2013-11-24 00:26:03
7#
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
如果没有解决,可能你的问题问得不够清楚。可以重新发问的哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马