8

我对abstract这里的关键字有点困惑。我的编译器告诉我,我不允许有一个抽象方法的主体。但是我的任务说:

抽象方法 orderDescription() 返回一个字符串,提供有关特定订单的详细信息。

abstract String orderDescription()
{
    return null;
}

但是,如上所述,我的代码返回错误。所以我的问题是我应该为这个问题做些什么?

到目前为止,我刚刚删除了关键字 abstract 并且效果很好。

4

6 回答 6

22
abstract String orderDescription()
{
    return null;
}

应该

abstract String orderDescription();

正如错误所说,您的抽象方法声明不应包含任何主体。

上面的语法要求实现(哪个类扩展抽象类并提供实现)返回一个字符串。

你不能实例化抽象类,所以有些类需要扩展抽象类并为这个抽象方法提供实现。

例子:

class MyabsClass 
{
  abstract String orderDescription();
}

class MyImplementation extends MyabsClass
{
   public String orderDescription()
    {
    return "This is description";
    }
}



 class MyClient
   {
     public static void main(String[] args)
      {
         MyImplementation imple = new MyImplementation();
         imple.orderDescription();
      }
   } 
于 2012-11-13T19:37:24.023 回答
12

当你定义一个抽象方法时,你是在告诉编译器任何子类都必须提供一个实现(或者也声明自己是抽象的)。

您在子类中实现抽象方法。

请记住,您不能自己创建抽象类的实例。抽象方法的全部意义在于告诉编译器您希望子类提供功能。

于 2012-11-13T19:39:46.797 回答
6

本质上,抽象函数不应该包含任何细节,它是继承函数的占位符函数。正如 Nambari 所说,您应该只包括定义。

这用于当您希望一个类族都包含一个公共函数时,您希望每个子类都定义该函数。

于 2012-11-13T19:39:21.710 回答
4

抽象方法通常不应包含任何“真实”代码,抽象方法将被包含该方法的非抽象类覆盖。

于 2012-11-13T20:15:25.020 回答
0

抽象方法不应该有任何方法体。它只允许方法声明。

于 2013-12-20T11:09:17.500 回答
0

此外,添加到 Nambari 的示例中,您可以做的是

class MyabsClass 
{
  abstract String orderDescription();
}

 class MyClient
   {
     public static void main(String[] args)
      {
         MyabsClass mac = new MyabsClass(){
              public String orderDescription()
              {
                     return "This is description";
              }
         };
         mac.orderDescription();
      }
   }

即通过匿名类。

于 2014-02-27T06:24:33.563 回答