dlp316007708 2009-08-31 10:47
浏览 234
已采纳

抽象实现 问题?

abstract class Fruit{ //水果类
void eat(); //--------吃水果
}

abstract class Food{ //--------食物类
void consumer(); //------消费食物
}

class Apple extends Fruit{ //---苹果类继承水果类
public void eat(){
System.out.println("苹果被我吃了"); }

  public Food  getFood(){   // -----采用匿名内部类获取食物;
       return new Food(){
              public void consumer(){
                         System.out.println("食物被我吃了"); }
                       };
                    }
          }

public class Person{
static void take(Fruit ft){ ft.eat(); }
static void take(Food fb){ fb.consumer(); }

public static void main(String[] args){
take(new Apple());
take(new Apple().getFood());
}
}

为什么编译时会在抽象类那个地方报错?谢谢你的解答。

  • 写回答

4条回答 默认 最新

  • wanghaolovezlq 2009-08-31 11:46
    关注

    看来你对java语法不太熟悉,

    abstract class Fruit{ //水果类
    void eat(); //--------吃水果
    }

    abstract class Food{ //--------食物类
    void consumer(); //------消费食物
    }

    这样定义抽象类里面的方法是错误的,java里对类的修饰符只有默认为包访问权限,

    你虽然在类前面加了abstract 以声明为抽象类,但你没有给方法加abstract以声明这是一个抽象方法,应该由子类实现,那么java是不会自动把抽象类中的方法解析为抽象方法,就以为是一个普通的方法,

    有两种方式来解决这个问题

    1.给方法加上abstract修饰符

    abstract class Fruit{ //水果类
    abstract void eat(); //--------吃水果
    }

    abstract class Food{ //--------食物类
    abstract void consumer(); //------消费食物
    }

    2.给方法加上空方法体

    abstract class Fruit{ //水果类
    void eat(){} //--------吃水果
    }

    abstract class Food{ //--------食物类
    void consumer(){} //------消费食物
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog