Java抽象方法

时间:2012-11-13 19:36:44

标签: java abstract-class

我在这里与关键字abstract略有混淆。我的编译器告诉我,我不允许拥有一个抽象方法的主体。不过我的任务是:

  

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

abstract String orderDescription()
{
    return null;
}

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

到目前为止,我刚刚删除了关键字abstract,它运行正常。

6 个答案:

答案 0 :(得分:22)

abstract String orderDescription()
{
    return null;
}

应该是

abstract String orderDescription();

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

上面的语法要求实现(通过类扩展抽象类并提供实现)来返回String。

您无法实例化抽象类,因此某些类需要扩展抽象类并为此抽象方法提供实现。

示例:

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

答案 1 :(得分:12)

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

在子类中实现抽象方法。

请记住,您无法自己创建抽象类的实例。抽象方法的全部要点是告诉编译器您希望子类提供功能。

答案 2 :(得分:6)

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

当你希望一个类族都包含一个公共函数时,可以使用它,你希望每个子类都能定义它。

答案 3 :(得分:4)

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

答案 4 :(得分:0)

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

答案 5 :(得分: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();
      }
   }

即通过匿名类。