缺少方法体,或声明抽象

时间:2015-03-27 04:39:47

标签: java netbeans

我收到此错误消息:

  

线程中的异常" main" java.lang.RuntimeException:无法编译的源代码 - 错误的sym类型:Pet.saySomething       在PetTest.main(PetTest.java:18)   Java结果:1

以下是我所拥有的:Speak类,

public class Speak {
   public void saySomething();
}

以下是PetTest课程中的内容:

 import java.util.ArrayList;

 public class PetTest {

     public static void main(String[] args)
     {
         ArrayList<Pet> myPets = new ArrayList<Pet>();

         myPets.add(new Parrot("Boss"));
         myPets.add(new Cat("Oreo"));
         myPets.add(new Dog("Riley"));

         for (Pet p: myPets)
         {
             p.saySomething();
             System.out.println(p);
         }
     }
 }

我没有发布与该程序一起使用的其他5个类。我知道有一些东西需要在Speak课程中修复,但我被困住了。在Speak类中,在显示public void saySomething();的行上显示Missing Method主体,或声明抽象。

编辑:以下是其他课程:

 public abstract class Pet {

     String name;

     public Pet(String name){
         this.name = name;
     }
 }

 public class Parrot extends Bird {

     public Parrot (String name)
     {
         super(name);
     }

     @Override
     public void saySomething()
     {
         System.out.println("Pauly want a craker?");
     }

     @Override
     public String toString()
     {
         return "Hello, I'm " + name + " the parrot.";
     }

 }


 public class Dog extends Pet {

     public Dog (String name)
     {
         super(name);
     }

     @Override
     public void saySomething()
     {
         System.out.println("Ruff, ruff!");
     }

     @Override
     public String toString()
     {
         return "Hello, I'm " + name + " the dog.";
     }
 }


 public class Cat extends Pet {

     public Cat(String name)
     {
         super(name);
     }

     @Override
     public void saySomething()
     {
    System.out.println("Meow.");
     }

     @Override
     public String toString()
     {
         return "Hello, I'm " + name + " the cat.";
     }
 }

 public class Bird extends Pet {

     public Bird(String name)
     {
         super(name);
     }

     public void saySomething(){}

 }

2 个答案:

答案 0 :(得分:1)

如果Speak是一个具体的类,它必须实现它的所有方法,因此saySomething必须有一个正文。

但是,看起来Speak更适合作为界面。您的Pet类可以实现该接口。

答案 1 :(得分:1)

Speak有以下选项,请选择:

<强>第一

public abstract class Speak{

   public abstract void saySomething();

}

<强>第二

public class Speak{

   public void saySomething(){

   }
}

<强>第三

public interface Speak{

   public void saySomething();
}

编辑:首先,您没有在任何地方使用Speak课程。其次,请在Pet类中添加以下方法:

 public abstract void saySomething();