- 抽象クラス(abstract class): 「共通の性質を持つクラスをグループ分けする」という働きをし、そのグループに共通する性質を定義を記述することで、 個々のサブクラスの記述を簡略化すること
- 通常のクラスの目的:オブジェクトを生成し、機能として具現化し、活用すること。
- 抽象クラスの目的:直接自分自身のオブジェクトを生成せず、他のクラスのスーパークラスになること。
- 例:「哺乳類」というクラスに関して、そのサブクラスには「犬」、「馬」、「くじら」などがあり、それらを継承していった先には、具現化すべき存在としての「柴犬」、「サラブレッド」、「ミンククジラ」などがあるだろう。これらをnewした具体的な一匹一匹の個体をオブジェクトと考えた。 この場合、そして「哺乳類」に含まれるオブジェクトは必ずサブクラスのいずれかになる(皆、哺乳類。子に乳を与えて育てる動物)。
- 「哺乳類」自身の直接のオブジェクトは存在しない。(もし具現化したら、バケモノが現れる。何処に棲息し、何を食べるのか?)
- (まとめ)抽象クラス「哺乳類」の役割:「乳を飲ませて子供を育てる」という共通の手続きが定義される。
Javaにおける抽象クラスの取り扱い:キーワードabstractを用いて、抽象クラスであることを明示する。名前と型の情報だけで、 定義の部分が存在しないメソッドを記述することもできる。
public abstract int Calc2Param( int x, int y ); : :
- メソッドの機能定義がないままでは、当然、何も処理が「実行」できない。
- 抽象クラス定義の主目的は、共通の性質を持つクラスをまとめるためにある。上記の例では、2つの整数値を引数としてもち、何かの計算を行い、計算結果を整数で返すようなクラス全ての抽象クラスとなりうる。この抽象クラスを継承していき、具体的に和算や引算、乗算やSUM計算を行うようなサブクラスをとりまとめる働きをする。あるクラスの中で abstract宣言されたメソッドの存在は、 そのサブクラスで具体的な機能を再定義することによって処理の中身を持つことが可能である。(問題:除算はこのサブクラスと成り得るか?)
- 「クラスにあらかじめ予定されている機能と、 その実際の内容(実装)を分離する」という考え方が、大変重要である。
2003年10月21日 6:19 更新