カテゴリ: Javaの抽象クラス 更新日: 2026/04/26

Javaの抽象クラスとポリモーフィズムを完全解説!初心者でもわかるオブジェクト指向の基本

335
Java の抽象クラスとポリモーフィズム(多態性)

先生と生徒の会話形式で理解しよう

生徒

「Javaの抽象クラスってなんですか?インターフェースとどう違うんですか?」

先生

「いい質問ですね。抽象クラスは、共通の処理や定義をまとめるための土台になるクラスなんです。」

生徒

「じゃあ、ポリモーフィズムってどう関係あるんですか?」

先生

「それも重要なポイントです。抽象クラスを使うことで、ポリモーフィズムを実現しやすくなるんですよ。詳しく解説していきますね。」

1. Javaの抽象クラスとは?基本を理解しよう

1. Javaの抽象クラスとは?基本を理解しよう
1. Javaの抽象クラスとは?基本を理解しよう

Javaの抽象クラス(abstract class)とは、共通する処理やプロパティを定義するための設計図のようなクラスです。抽象クラスは直接インスタンス化できず、必ず継承して使います。

例えば、動物という抽象的な概念を表す「Animal」クラスを作成し、そこから「Dog」や「Cat」などの具象クラスに継承させることで、共通の処理を統一できます。

抽象クラスでは、抽象メソッド(abstract method)を定義することができ、これによりサブクラスでの具体的な実装を強制することが可能になります。

2. 抽象クラスの基本構文と使用例

2. 抽象クラスの基本構文と使用例
2. 抽象クラスの基本構文と使用例

Javaで抽象クラスを定義するには、abstractキーワードを使います。以下に基本的な使用例を紹介します。


abstract class Animal {
    String name;

    Animal(String name) {
        this.name = name;
    }

    abstract void makeSound();

    void eat() {
        System.out.println(name + " is eating.");
    }
}

class Dog extends Animal {
    Dog(String name) {
        super(name);
    }

    @Override
    void makeSound() {
        System.out.println(name + " says: ワンワン!");
    }
}

このように、抽象クラスAnimalmakeSoundという抽象メソッドを持ち、それをDogクラスで実装しています。

3. 実行結果を見てみよう

3. 実行結果を見てみよう
3. 実行結果を見てみよう

では、実際に上記のDogクラスを使って動作を確認してみましょう。


public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog("ポチ");
        myDog.makeSound();
        myDog.eat();
    }
}

ポチ says: ワンワン!
ポチ is eating.

Javaをこれから始める人や、 オブジェクト指向の考え方を基礎から理解したい人には、 定番の入門書がこちらです。

スッキリわかるJava入門 第4版をAmazonで見る

※ Amazon広告リンク

4. ポリモーフィズム(多態性)との関係

4. ポリモーフィズム(多態性)との関係
4. ポリモーフィズム(多態性)との関係

Javaの抽象クラスを使う最大のメリットの1つが、ポリモーフィズム(Polymorphism)の実現です。

ポリモーフィズムとは、「同じ型(親クラス)を使って、異なる振る舞い(サブクラスの実装)を実行できる」というオブジェクト指向の基本概念です。

たとえば、Animal型の変数にDogCatなどのインスタンスを代入して、共通のメソッドmakeSound()を呼び出すことで、それぞれのクラスに応じた動作を実行できます。

5. 具体的なポリモーフィズムの例

5. 具体的なポリモーフィズムの例
5. 具体的なポリモーフィズムの例

class Cat extends Animal {
    Cat(String name) {
        super(name);
    }

    @Override
    void makeSound() {
        System.out.println(name + " says: ニャーニャー!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal[] animals = {
            new Dog("ポチ"),
            new Cat("ミケ")
        };

        for (Animal a : animals) {
            a.makeSound();
            a.eat();
        }
    }
}

ポチ says: ワンワン!
ポチ is eating.
ミケ says: ニャーニャー!
ミケ is eating.

このように、配列Animal[]でポリモーフィズムを活用することで、コードを簡潔かつ拡張性の高い形に保てます。

6. 抽象クラスとインターフェースの違い

6. 抽象クラスとインターフェースの違い
6. 抽象クラスとインターフェースの違い

Javaでは、抽象クラスとインターフェースの両方が継承の仕組みを持っていますが、役割が異なります。

  • 抽象クラス:共通のロジック(フィールドや具象メソッド)を持たせたいときに使う
  • インターフェース:契約(メソッド定義)だけを提示して、複数の型に実装させたいときに使う

たとえば、Animalという抽象クラスにはnameフィールドやeatのような実装付きの共通処理を記述できますが、インターフェースにはフィールドを持つことはできません(定数以外)。

7. 抽象クラスが役立つシーンとは?

7. 抽象クラスが役立つシーンとは?
7. 抽象クラスが役立つシーンとは?

抽象クラスは、以下のようなケースで特に効果的です。

  • サブクラスで共通の初期化処理をまとめたいとき
  • 共通のロジックを継承させつつ、クラスごとに違う振る舞いをもたせたいとき
  • 複数のクラスに一貫したインターフェースを提供したいとき

ポリモーフィズムを意識した設計において、抽象クラスは非常に重要な役割を果たします。

8. 抽象クラスとポリモーフィズムの理解がJava上達のカギ

8. 抽象クラスとポリモーフィズムの理解がJava上達のカギ
8. 抽象クラスとポリモーフィズムの理解がJava上達のカギ

Javaにおける抽象クラスの役割やポリモーフィズムの使い方を理解することは、オブジェクト指向プログラミングを正しく設計・実装するうえで欠かせません。

初心者のうちは、インターフェースとの違いに戸惑うかもしれませんが、実際にコードを書いて動かしてみることで、理解が深まっていくはずです。

継承・抽象クラス・ポリモーフィズムというJavaの基本をしっかりと身につけて、柔軟で拡張性の高いコードが書けるようになりましょう!

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Javaの抽象クラス(abstract class)とは、具体的にどのような役割を持つクラスなのですか?

Javaの抽象クラスとは、オブジェクト指向プログラミングにおいて「共通の性質や振る舞い」をまとめるための「設計図の設計図」のような役割を果たします。プログラミング初心者が混同しやすいポイントですが、抽象クラス自体は実体を持たない不完全なクラスであるため、ニュー(new)演算子を使って直接インスタンス化することができません。例えば、「動物」という概念は抽象的ですが、「犬」や「猫」は具体的です。Javaの設計において、全ての動物に共通する「名前(name)」や「食べる(eat)」という処理を抽象クラスに記述し、個別の具体的な動作は継承先のサブクラスに任せることで、コードの再利用性とメンテナンス性を大幅に向上させることができます。
Javaの抽象クラスの一覧へ
新着記事
Flutter
Flutterでのリポジトリパターンの実装例
Flutterでリポジトリパターンを実装する方法を完全解説!初心者向けアーキテクチャ設計入門
Java
Java の Objects クラスを使って null チェックを簡単にする方法
JavaのObjectsクラスの使い方を完全ガイド!nullチェックを簡単・安全に行う方法
Java
Java の UUID クラスを使って一意の識別子を作成する方法
JavaのUUIDクラスの使い方を完全ガイド!初心者でもわかる一意な識別子の作成方法
Java
Java の古い日付クラス(Date, Calendar)と新しい日付 API の違い
JavaのDateとCalendarと新しい日付APIの違いとは?初心者向け完全ガイド
人気記事
Java
Java の Random クラスを使ってランダムな数値を生成する方法
JavaのRandomクラスの使い方を完全ガイド!初心者でもわかる乱数生成
Java
Java の getter メソッドと setter メソッドの使い方
Javaのgetterメソッドとsetterメソッドの使い方を完全ガイド!初心者でもわかるアクセス方法
AWS
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
AWS
【AWS】VPCとは?初心者向けに仕組み・用途・できることをわかりやすく解説
【AWS】VPCとは?初心者向けに仕組み・用途・できることをわかりやすく解説

🔌 USBポート不足を解消

Type-C 1本で拡張。
開発・作業環境を一気に快適に

UGREEN USB-Cハブを見る

※ Amazon広告リンク