抽象クラスには少なくとも1つの抽象メソッドが必要ですか?
この投稿の主題と本文は、2つの異なる質問をします。
#2の答えは間違いなくノーです。
#1の答えは主観的であり、スタイルの問題です。個人的にはそうだと思います。クラス(抽象メソッドなし)がインスタンス化されないようにすることが目的の場合、これを処理する最善の方法は、 private
protected
コンストラクター、マーク付けではありませんabstract
。
いいえ、必要ありません。これは、 "template method" デザインパターンによく見られます。たとえば、 HttpServlet
のように、各メソッドにはすでにデフォルトの動作が定義されており、自由にオーバーライドできます。それらのallではなく、1つ(または複数)だけです。
JDK 1.0では、抽象クラスに少なくとも1つの抽象メソッドが必要でした。この制限はJDK1.1(1997?(私は古い))で削除され、そのようなクラスはJava.awt.event.KeyAdapter
などのJavaライブラリに追加されました。
C++では、サブクラスを必要とするために少なくとも1つの純粋仮想関数が必要であり、RTTIをクラスに追加するために少なくとも1つの仮想関数が必要です。通常、デストラクタを使用することは理にかなっています。
非抽象メソッドをオーバーライドする場合は、@Override
を使用することをお勧めします。これは、コードが実行しようとしていることに関する重要な情報を読者に伝えるだけでなく、タイプミスや誤ったパラメータータイプによってオーバーライドが妨げられる一般的なエラーを検出します。
いいえ-抽象メソッドがなくてもクラス抽象を宣言できます。そのクラスのインスタンスが存在することは概念的に意味がない場合があります。または、そのクラスのサブクラスのみをインスタンス化できるようにする必要がある場合があります(何らかの理由で)