8

ここでのキーワードと少し混乱していabstractます。コンパイラは、抽象メソッドの本体を持つことは許可されていないと言っています。ただし、私の課題は次のように述べています。

抽象メソッド orderDescription() は、特定の注文に関する詳細を示す文字列を返します。

abstract String orderDescription()
{
    return null;
}

ただし、上記のように、私のコードはエラーを返します。だから私の質問は、この問題に対して何をすべきですか?

これまでのところ、キーワードabstractを削除しただけで、うまく機能しています。

4

6 に答える 6

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();
      }
   } 
于 2012-11-13T19:37:24.023 に答える
12

抽象メソッドを定義すると、サブクラスが実装を提供する必要がある (または自身を抽象宣言する) 必要があることをコンパイラに伝えます。

サブクラスに抽象メソッドを実装します。

抽象クラス自体のインスタンスを作成できないことに注意してください。抽象メソッドの要点は、サブクラスが機能を提供することをコンパイラーに伝えることです。

于 2012-11-13T19:39:46.797 に答える
6

基本的に、抽象関数には詳細を含めるべきではありません。これは、継承された関数のプレースホルダー関数です。ナンバリが述べたように、定義のみを含める必要があります。

これは、クラスのファミリーすべてに共通の関数を含めたい場合に使用され、各子クラスで定義したい場合に使用されます。

于 2012-11-13T19:39:21.710 に答える
4

一般に、抽象メソッドには「実際の」コードを含めることはできません。抽象メソッドは、メソッドを含む非抽象クラスによってオーバーライドされます。

于 2012-11-13T20:15:25.020 に答える
0

また、なんばりさんの例に加えて、できることは

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 に答える
0

抽象メソッドにはメソッド本体があってはなりません。メソッド宣言のみを許可します。

于 2013-12-20T11:09:17.500 に答える