カテゴリ: Javaの抽象クラス 更新日: 2025/09/13

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の抽象クラスの一覧へ
新着記事
FlutterのMVP・MVVMアーキテクチャの違いと使い分け
FlutterのMVP・MVVMアーキテクチャの違いと使い分けを初心者向けに解説!
オニオンアーキテクチャの基本とFlutterでの適用例
オニオンアーキテクチャの基本とFlutterでの適用例を初心者向けに解説
クリーンアーキテクチャとは?Flutterでの導入メリット
クリーンアーキテクチャとは?Flutterでの導入メリットをやさしく解説
【AWS】RDS for Oracleの特徴・できないこと・バージョン・料金まとめ
【AWS】RDS for Oracleの特徴・できないこと・バージョン・料金を初心者向けに徹底解説
人気記事
インスタンスタイプの料金比較と最適な選び方(最新2025年版)
AWSのインスタンスタイプの料金比較と最適な選び方【2025年最新版】
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCの料金体系まとめ!無料枠・通信費・各種サービスごとの料金を徹底解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説

🔌 USBポート不足を解消

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

UGREEN USB-Cハブを見る

※ Amazon広告リンク