【问题标题】:Missing Method body, or declare abstract缺少方法主体,或声明抽象
【发布时间】:2015-03-27 04:39:47
【问题描述】:

我收到此错误消息:

线程“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(); 的行上,它说缺少方法主体,或者声明抽象。

编辑:这里是其他类:

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

 }

【问题讨论】:

  • 只是出于好奇,您使用的是 Netbeans 吗?
  • 那么你可能想检查一下:stackoverflow.com/q/4386076/1065197
  • 我检查了那个,但是仍然有同样的问题

标签: java netbeans


【解决方案1】:

您有以下说话选项,任您选择:

第一

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

【讨论】:

  • 我尝试了所有 3 个选项,但我仍然在线程“main”中收到异常 java.lang.RuntimeException:无法编译的源代码 - 错误的 sym 类型:PetTest.main 的 Pet.saySomething(PetTest .java:18) Java 结果:1
  • 效果很好。如您所知,我不是Java专家。感谢您的帮助
【解决方案2】:

如果Speak 是一个具体类,它必须实现它的所有方法,所以saySomething 必须有一个主体。

不过,看起来Speak 更适合做接口。您的Pet 类可以实现该接口。

【讨论】:

    猜你喜欢
    • 2015-08-17
    • 2019-05-24
    • 2022-11-02
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 2011-07-18
    • 2015-06-29
    相关资源
    最近更新 更多