【はじめてのJava】抽象クラス【クラスの継承編】
はじめてのJava
このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。
Javaではクラスを継承することができました。
クラスの継承を行う際によく利用されるクラスが「抽象クラス」です。
今回の記事では、その「抽象クラス」について解説していきます。
目次
抽象クラスとは
Javaでは、クラスを定義し、インスタンス化して利用することで、何かしらの役割を持ったオブジェクトを生成し、処理を実行させることができました。
その時に利用していた、インスタンス化して利用するクラスを「具象クラス」と呼びます。
具象クラスには、変数とメソッドを定義し、オブジェクトに処理を持たせることが一般的です。
それに対して、処理内容を記述しないメソッドを持つクラスを定義することもできます。
処理内容を記述しないメソッドを「抽象メソッド」と呼びます。
抽象メソッドはそのままでは利用することができず、必ずオーバーライドしてサブクラスで処理内容を再定義する必要があります。
抽象メソッドが定義されたクラスは「抽象クラス」と呼ばれ、抽象メソッドはそのままでは利用できないため、抽象クラスを直接インスタンス化してオブジェクトを生成することはできません。
すなわち、抽象クラスは「抽象クラスを継承してサブクラスを定義する」ことを目的として定義されるクラスです。
抽象クラスを利用することによって、継承して作成したクラスには必ず抽象クラスをオーバーライドしなければならず、メソッドの実装を統一することができるというメリットがあります。
また、抽象メソッドをオーバーライドしていないとコンパイルエラーになりますので、メソッドの実装漏れを防ぐことも可能になります。
抽象クラスの作成
抽象クラスを定義する際には、クラス定義に「abstract」キーワードをつけて行います。
抽象クラスはそのままインスタンス化することができないので、利用する場合には「extends」キーワードを利用してクラスを継承します。
抽象クラスの中には、通常のクラスと同様に変数やメソッドの定義が可能な他、抽象メソッドの定義が可能です。
[構文]
【修飾子】 abstract class クラス名 { 変数やメソッド、抽象メソッドを定義 } 【修飾子】 class サブクラス名 extends 抽象クラス名 { 変数やメソッドの定義、抽象メソッドのオーバーライド }
抽象メソッド
前述したとおり、抽象クラスの大きな特徴として、「抽象メソッド」を定義することができることが挙げられます。
抽象メソッドは、処理内容を記述せずに、引数や戻り値のデータ型、メソッド名のみを定義することができるメソッドです。
通常のメソッドとは定義の方法が異なるので、注意が必要です。
[構文]
【修飾子】 abstract class 抽象クラス名{ 【修飾子】 abstract 戻り値のデータ型(void) メソッド名(引数リスト); ※メソッドの処理内容は記述しないので;(セミコロン)で終わっていることに注意! }
通常のメソッドのように{}を記述して抽象クラスを定義しようとするとコンパイルエラーになります。
abstract class AbsSample{ public abstract void method1(); //↑セミコロンで終了するように記述する。 public abstract void method2() { } //↑通常のメソッドのように{}を付けるとコンパイルエラー! }
クラスの継承編・次回の内容
今回でクラスの継承編は終了になります。
次回は抽象クラスと同じような役割を持つインタフェースについての解説編を書いていきます。
初めてのJavaシリーズの目次はこちら
クラスの継承編の記事一覧はこちら