Javaの抽象メソッドとは?初心者でもわかる子クラスで実装を強制する仕組み
生徒
「Javaで抽象メソッドって何ですか?普通のメソッドと何が違うんですか?」
先生
「抽象メソッドは、処理の中身を持たないメソッドのことです。Javaではabstractキーワードを使って定義します。」
生徒
「処理がないってことは、どうやって使うんですか?」
先生
「抽象メソッドは、必ず子クラスで実装することがルールです。今から基本の書き方や動作の仕組みを一緒に学んでいきましょう。」
1. 抽象メソッドとは?Javaの基礎から理解しよう
Javaの抽象メソッドとは、処理の中身を持たないメソッドのことです。キーワードabstractを使って定義し、中括弧{ }で囲んだ本体がありません。つまり、「こういう機能が必要だけど、どう処理するかは子クラスで決めてね」という設計のイメージです。
抽象メソッドを使うと、子クラスでの実装を強制できるため、コードの統一感や拡張性が高まります。
2. Javaで抽象メソッドを定義する基本構文
抽象メソッドは、必ず抽象クラスの中に記述します。構文は以下の通りです。
public abstract class Animal {
// 抽象メソッド(中身なし)
public abstract void makeSound();
// 通常のメソッド(中身あり)
public void breathe() {
System.out.println("息をする");
}
}
ポイント:
abstractキーワードを忘れずに- 抽象メソッドには
{}の中身を書かない - 抽象クラスでしか定義できない
3. 抽象メソッドは子クラスで必ずオーバーライドが必要
抽象メソッドを持つ抽象クラスを継承した場合、すべての抽象メソッドを子クラスで実装しなければなりません。以下のように使います。
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("ワンワン!");
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.breathe();
dog.makeSound();
}
}
息をする
ワンワン!
抽象メソッドをオーバーライドしないとコンパイルエラーになります。これはJavaの言語仕様により強制されているため、安全で信頼できるコードが書けるようになります。
4. 抽象メソッドの使いどころは?
抽象メソッドは、共通のインターフェース(操作)だけを定義し、具体的な処理はサブクラスに任せたい場合に使います。
たとえば、「動物は鳴く」という共通の機能があっても、Dogなら「ワンワン」、Catなら「ニャー」と異なる処理になります。そんな時に抽象メソッドが活躍します。
以下はCatクラスの例です。
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("ニャー");
}
}
5. 抽象クラスとインターフェースの違いにも注目しよう
抽象メソッドはinterfaceにも定義できますが、abstract classとの違いを理解することが重要です。
- 抽象クラス:メソッドの実装も持てる、フィールドやコンストラクタもOK
- インターフェース:定義のみ(Java 8以降はdefaultメソッドあり)
処理のひな型を提供したいならabstract class、複数の型に共通の機能を与えたいならinterfaceを選ぶのが良いでしょう。
6. Java初心者が抽象メソッドで気をつけるポイント
Java初心者が抽象メソッドを使うときに注意したいのは以下の3点です。
- 抽象メソッドには中身(処理)を書かないこと
- 抽象メソッドを定義したらクラスも
abstractにする - 継承した子クラスでオーバーライド(@Override)を忘れずに
これらを守れば、オブジェクト指向らしい柔軟な設計ができるようになります。特に大規模なJavaアプリケーションでは、抽象メソッドを活用した設計が欠かせません。