web-dev-qa-db-ja.com

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

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

20
java_geek

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

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

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

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

15
matt b

いいえ、必要ありません。これは、 "template method" デザインパターンによく見られます。たとえば、 HttpServlet のように、各メソッドにはすでにデフォルトの動作が定義されており、自由にオーバーライドできます。それらのallではなく、1つ(または複数)だけです。

14
BalusC

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

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

非抽象メソッドをオーバーライドする場合は、@Overrideを使用することをお勧めします。これは、コードが実行しようとしていることに関する重要な情報を読者に伝えるだけでなく、タイプミスや誤ったパラメータータイプによってオーバーライドが妨げられる一般的なエラーを検出します。

10

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

6
thecoop