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

Javaの抽象クラスを継承して具象クラスを作る方法!初心者向け完全ガイド

332
Java の抽象クラスを継承して具象クラスを作る方法

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

生徒

「Javaの抽象クラスって、どうやって継承して使うんですか?」

先生

「抽象クラスは、extendsを使ってサブクラスとして継承できますよ。具象クラスでは、抽象メソッドをすべて実装する必要があります。」

生徒

「その実装って、具体的にどう書けばいいんですか?」

先生

「それでは、Javaで抽象クラスを継承して具象クラスを作る方法を、順を追って解説していきましょう!」

1. Javaの抽象クラスとは?

1. Javaの抽象クラスとは?
1. Javaの抽象クラスとは?

Javaの抽象クラス(abstract class)は、他のクラスで共通の振る舞いや構造をまとめるために使うクラスです。中には抽象メソッド(処理のないメソッド)と通常のメソッド(処理を持つメソッド)の両方を定義できます。

抽象クラス自体は直接インスタンス化できません。そのため、抽象クラスを継承した具象クラス(サブクラス)を作り、そちらで使用します。

2. 抽象クラスの基本構文

2. 抽象クラスの基本構文
2. 抽象クラスの基本構文

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


abstract class Animal {
    public abstract void makeSound(); // 抽象メソッド

    public void sleep() {
        System.out.println("動物が眠っています");
    }
}

makeSound()は抽象メソッドなので、具体的な処理はサブクラスで定義する必要があります。

3. 具象クラスで抽象クラスを継承する

3. 具象クラスで抽象クラスを継承する
3. 具象クラスで抽象クラスを継承する

抽象クラスを継承するには、extendsキーワードを使って新しいクラスを作ります。このとき、すべての抽象メソッドをoverrideしなければなりません。


class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("ワンワン!");
    }
}

このように具象クラス(Dogクラス)で抽象メソッドを実装することで、Dogクラスはインスタンス化可能になります。

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

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

※ Amazon広告リンク

4. 実際に使ってみよう

4. 実際に使ってみよう
4. 実際に使ってみよう

それでは、実際に抽象クラスを継承して作った具象クラスを使うJavaプログラムを見てみましょう。


public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        myDog.makeSound(); // ワンワン!
        myDog.sleep();     // 動物が眠っています
    }
}

このように、DogAnimalのサブクラスとして抽象メソッドを実装しているため、実体化でき、共通のsleep()メソッドも使えます。

5. 複数の具象クラスで多様性を持たせる

5. 複数の具象クラスで多様性を持たせる
5. 複数の具象クラスで多様性を持たせる

抽象クラスは、同じ基盤を持った複数のクラスを作成する際にとても便利です。以下はCatクラスも継承した例です。


class Cat extends Animal {
    @Override
    public void makeSound() {
        System.out.println("ニャーニャー!");
    }
}

このようにすれば、Animal型の変数でDogCatも扱うことができ、ポリモーフィズム(多態性)を実現できます。

6. 抽象クラスと具象クラスの活用例

6. 抽象クラスと具象クラスの活用例
6. 抽象クラスと具象クラスの活用例

例えば、動物園のシステムを作るとしましょう。共通機能はAnimalにまとめて、動物ごとの鳴き声などはDogCatで分けて実装できます。

以下のようなコードがその例です:


public class Zoo {
    public static void main(String[] args) {
        Animal[] animals = { new Dog(), new Cat() };

        for (Animal a : animals) {
            a.makeSound(); // それぞれの動物の鳴き声
            a.sleep();     // 共通のsleep()メソッド
        }
    }
}

7. よくあるエラーと注意点

7. よくあるエラーと注意点
7. よくあるエラーと注意点

抽象クラスを使うときに初心者がよく陥るポイントをまとめておきましょう。

  • 抽象メソッドの未実装:具象クラスで抽象メソッドをすべて実装しないとエラーになります。
  • 抽象クラスのインスタンス化:抽象クラスをnewで直接インスタンス化しようとするとエラーになります。
  • アクセス修飾子:抽象メソッドにはアクセス修飾子をつけ忘れないようにしましょう(通常はpublic)。

8. 抽象クラスを活かした設計の考え方

8. 抽象クラスを活かした設計の考え方
8. 抽象クラスを活かした設計の考え方

抽象クラスを使うことで、ソフトウェア設計がより柔軟で拡張性の高いものになります。共通部分を一箇所に集約し、それぞれの具体的な振る舞いだけをサブクラスで分担すれば、保守性も高く、再利用性にも優れた設計になります。

特に、後から別の動物クラスを追加したくなった場合でも、Animalを継承してmakeSound()さえ実装すれば、既存のコードをほとんど変えずに機能を拡張できます。

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

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

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

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

Javaの抽象クラスとは、オブジェクト指向プログラミングにおいて「共通の性質」や「共通の振る舞い」を定義するための土台となるクラスです。キーワードとしてabstractをクラス宣言に付与することで定義されます。抽象クラスの最大の特徴は、メソッドのシグネチャ(名前や引数)だけを決めて処理の中身を書かない「抽象メソッド」を持てる点にあります。これにより、複数の子クラスで共通して持っておくべきルールを強制しつつ、具体的な処理の内容はそれぞれの継承先である具象クラスに任せることができるという、ソフトウェア設計上のテンプレートのような役割を果たします。
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広告リンク