23

抽象クラスに少なくとも 1 つの抽象メソッドが必要ですか?

4

5 に答える 5

17

この投稿の主題と本文は、2つの異なる質問をします。

  1. 少なくとも1つの抽象メンバーが必要ですか?
  2. 少なくとも1つの抽象メンバーが必要ですか?

#2の答えは間違いなくノーです。

#1の答えは主観的であり、スタイルの問題です。個人的にはそうだと思います。クラス(抽象メソッドなし)がインスタンス化されないようにすることが目的の場合、これを処理する最善の方法は、マークを付けるのではなく、コンストラクターを使用することです。privateprotectedabstract

于 2010-02-17T18:43:32.517 に答える
15

いいえ、必要ありません。これは、 のような「テンプレート メソッド」設計パターンでよく見られます。この場合、各メソッドには既定の動作が既に定義されており、それらのすべてHttpServletではなく、そのうちの 1 つ (または複数) のみを自由にオーバーライドできます。

于 2010-02-17T18:37:52.657 に答える
10

JDK 1.0 では、抽象クラスに少なくとも 1 つの抽象メソッドが必要でした。この制限は JDK 1.1 (1997 年? (私は古い)) で削除され、そのようなクラスが Java ライブラリに追加されましたjava.awt.event.KeyAdapter

C++ では、サブクラスを必要とするために少なくとも 1 つの純粋仮想関数と、クラスに RTTI を追加するために少なくとも 1 つの仮想関数が必要です。通常、デストラクタを使用することは理にかなっています。

非抽象メソッドをオーバーライドする場合@Overrideは、 を使用することをお勧めします。コードが何をしようとしているのかについての重要な情報を読者に伝えるだけでなく、タイプミスや不適切なパラメーターの型がオーバーライドを妨げている一般的なエラーも見つけます。

于 2010-02-17T18:41:53.757 に答える
8

いいえ - 抽象メソッドがなくてもクラス抽象を宣言できます。そのクラスのインスタンスが存在することが概念的に意味をなさない場合や、(何らかの理由で) そのクラスのサブクラスのみをインスタンス化できるようにしたい場合があります。

于 2010-02-17T18:37:50.610 に答える
-1

abstractクラスの宣言に修飾子がある場合、それはabstractクラスになります。

于 2010-02-17T18:47:32.567 に答える