黑马程序员技术交流社区

标题: 下面的问题出在哪里,找不到! [打印本页]

作者: 心的方向    时间: 2013-11-23 21:31
标题: 下面的问题出在哪里,找不到!

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();
        }
}


作者: 零下五度的水    时间: 2013-11-23 21:41
接口里没有方法,你调什么
作者: 心的方向    时间: 2013-11-23 21:49
我不是new的一个类吗,生成了一个实例啊?
作者: 樊志伟    时间: 2013-11-23 22:24
你的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. }
复制代码

作者: 习嘻嘻    时间: 2013-11-23 22:34
多态中成员方法的编译运行规则是:编译看左边,运行看右边,
也就是 Utility u = new Phone();的左右,左边为父接口,但是你的接口里
没有该方法的声明,因此编译会出错。

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

就可以了。

作者: 中关村阿旺    时间: 2013-11-23 22:35
你的这句话:Utility u = new Phone();,其中Utility是一个接口,Phone类实现了这个接口,你这是多态。接口型引用指向子类对象,不能调用子类中的特有方法。你的use()方法只在Phone类中有,而接口中没有。所以编译错误。你可以在接口中添加use()方法,也可以把代码改成:Phoneu = new Phone();就没有问题了。你试试。
作者: FFF    时间: 2013-11-24 00:26
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
如果没有解决,可能你的问题问得不够清楚。可以重新发问的哦~




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