抽象クラスについて
2.1 抽象クラスについて
これまで様々な機能を持たせたクラスや、既存のクラスを利用して新しいクラスを作成してきました。さらにJavaでは通常のクラスとは少し異なった抽象クラス(abstract class)を作成し利用する事ができます。
抽象クラスとは、文字通り抽象的存在のクラスであり、具体的な処理は抽象クラスを継承したクラスに記述します。抽象クラスの存在意義は複数のクラスに対して強制的に共通機能(共通処理)を持たせることです。
次項より抽象クラスについて詳しく説明を行っていきます。
2.1.1 抽象クラスの特徴
通常のクラスとは異なる、抽象クラスの特徴やメリットについて以下に示します。
抽象クラスのメイン特徴
・ 抽象クラスのオブジェクト生成は行えない。
・ 抽象クラスには処理内容を持たない、抽象メソッド(abstract method)を定義できる。
・ 抽象メソッドがある抽象クラスを継承したサブクラスは、抽象メソッドを必ずオーバーライドしなければなりません。(オーバーライドしないとコンパイラエラーになります。)
抽象クラスのメリット
・ 継承を利用して共通処理を提供できる。
・ 抽象メソッドを定義する事で、継承した各サブクラスに必須のメソッド定義(名前、戻り値の型、引数の形式)を強制できる。
上記で示したメリットだけでは、言葉の意味はわかっても実際に理解は難しいと思います。
実際の現場での体験談で説明すると、例えば抽象クラスを用意せずに、ある人にこのような機能を必ず実装しなさいと、文章や口頭で説明を行っても指示の勘違いでの実装ミスや、機能の実装漏れなどの問題が起こる可能性があります。そこで抽象クラスを用意しておき、ある機能作成する場合「この抽象クラスを継承し実装しなさい」と指示を出すだけで、一般メソッドとして共通機能を提供でき、サブクラスごとの個別機能は抽象メソッドとして用意しておけば、各サブクラスを実装時には強制的に記述させることができるようになります。
図 2.1.1: 抽象クラスを元にした拡張イメージ
抽象クラスはオブジェクト化できない特性の為、図2.1.1で示すように継承して初めてその真価を発揮します。継承することでサブクラスに共通処理を提供し、必須の処理(メソッド)を忘れずに実装させる事が可能になります。