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

Javaの抽象クラスを実践!動物クラスを作って学ぶオブジェクト指向

336
Java の抽象クラスを実践!動物クラスを作ってみよう

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

生徒

「Javaの抽象クラスって実際にどうやって使えばいいんですか?」

先生

「それなら、動物クラスを例にして、Javaの抽象クラスを実践的に学んでみましょうか。」

生徒

「動物クラスですか?具体的にどんなことができるんですか?」

先生

「共通の動作を抽象クラスで定義して、犬や猫など具体的な動物はサブクラスとして作るんです。コードもシンプルで、ポリモーフィズムも自然に使えるようになりますよ。」

1. Javaの抽象クラスとは?基本の考え方

1. Javaの抽象クラスとは?基本の考え方
1. Javaの抽象クラスとは?基本の考え方

Javaの抽象クラスは、共通する性質や動作をまとめるためのクラスで、abstractキーワードを使って定義します。抽象クラスには抽象メソッド(定義だけで中身のないメソッド)を含めることができ、具体的な処理はサブクラスで実装します。

たとえば、動物ならすべての動物が「鳴く」機能を持っているけど、その鳴き方は犬と猫で異なります。これを抽象クラスと具象クラスで表現することができます。

2. 動物クラスの設計と抽象クラスの定義

2. 動物クラスの設計と抽象クラスの定義
2. 動物クラスの設計と抽象クラスの定義

まずは「Animal(動物)」という抽象クラスを作成して、その中に共通のプロパティやメソッドを定義します。ここではnameという名前と、makeSound()という抽象メソッドを用意しましょう。


abstract class Animal {
    String name;

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

    abstract void makeSound();

    void sleep() {
        System.out.println(name + " is sleeping...");
    }
}

このAnimalクラスでは、すべての動物がsleepするという共通の動作を持ち、鳴き方はサブクラスに任せるようにしています。

3. DogクラスとCatクラスを実装しよう

3. DogクラスとCatクラスを実装しよう
3. DogクラスとCatクラスを実装しよう

次に、Animalクラスを継承して、具体的な動物クラスを作成します。DogクラスとCatクラスを例に見てみましょう。


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

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

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

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

このように、継承を使って共通部分を引き継ぎつつ、個別の動作をそれぞれ定義できます。

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

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

※ Amazon広告リンク

4. 抽象クラスを使った実践コード

4. 抽象クラスを使った実践コード
4. 抽象クラスを使った実践コード

ここまで定義したクラスを使って、実際にJavaのメインメソッドでインスタンスを生成して動作を確認してみましょう。


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

        myDog.makeSound();
        myCat.makeSound();

        myDog.sleep();
        myCat.sleep();
    }
}

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

Javaの抽象クラスとポリモーフィズムを使うことで、コードの再利用性が高まり、保守性の高い設計が可能になります。

5. ポリモーフィズムを活用してコードをシンプルに

5. ポリモーフィズムを活用してコードをシンプルに
5. ポリモーフィズムを活用してコードをシンプルに

抽象クラスを通じて、ポリモーフィズム(多態性)を自然に利用することができます。同じAnimal型として扱うことで、配列やリストを使って複数の異なるオブジェクトをまとめて扱えるようになります。


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

        for (Animal animal : animals) {
            animal.makeSound();
            animal.sleep();
        }
    }
}

ポチ says: ワンワン!
ポチ is sleeping...
タマ says: ニャーニャー!
タマ is sleeping...
シロ says: ワンワン!
シロ is sleeping...

このように、動物の種類にかかわらず同じ型で処理ができるため、コードが非常にシンプルで管理しやすくなります。

6. 抽象クラスに引数を渡してみよう

6. 抽象クラスに引数を渡してみよう
6. 抽象クラスに引数を渡してみよう

さらに実践的に、動物の種類や鳴き声のパターンを外部から渡せるようにすることで、より柔軟な設計が可能になります。以下は改良例です。


abstract class Animal {
    String name;
    String sound;

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

    abstract void makeSound();

    void sleep() {
        System.out.println(name + " is sleeping...");
    }
}

class Dog extends Animal {
    Dog(String name) {
        super(name, "ワンワン!");
    }

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

このように、フィールドに柔軟性を持たせることで、将来的にクラスの拡張がしやすくなります。

7. Javaの抽象クラスを使うときの注意点

7. Javaの抽象クラスを使うときの注意点
7. Javaの抽象クラスを使うときの注意点
  • 抽象クラスは直接インスタンス化できません
  • 抽象クラス内で抽象メソッドを1つでも定義した場合、必ずクラス自体をabstractにする必要があります
  • サブクラスは、抽象メソッドをすべてオーバーライド(上書き)する義務があります

これらのルールを守ることで、Javaの抽象クラスはより安全で一貫性のある設計に役立ちます。

Javaの抽象クラスの一覧へ
新着記事
AWS
【AWS】CLIでクエリ(--query)の使い方を徹底解説【JQとの違いも】
【AWS CLI】--queryオプションの使い方を徹底解説!JMESPathとJQとの違いも初心者向けにわかりやすく解説
Java
Java の継承のメリットとは?コードの再利用をしやすくする
Java の継承のメリットとは?コードの再利用をしやすくする方法を初心者向けに解説
Java
Java の継承を使うべき場面と使わないほうがよい場面
Java の継承を使うべき場面と使わないほうがよい場面を初心者向けに解説!
Java
Java の toString() メソッドをオーバーライドしてオブジェクトの情報を表示
Java の toString() メソッドをオーバーライドしてオブジェクトの情報を表示
人気記事
AWS
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説
【AWS】s3 cpコマンド完全ガイド!基本・recursive・exclude/includeも解説
AWS
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
【AWS】VPCエンドポイントとは?種類・使い方・S3連携まで完全解説
AWS
インスタンスタイプの料金比較と最適な選び方(最新2026年版)
AWSインスタンスタイプの料金比較と最適な選び方!初心者でもわかる2025年最新ガイド
AWS
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説
【AWS】RDSの料金体系まとめ!ざっくり理解・高いと感じる理由も解説

🔌 USBポート不足を解消

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

UGREEN USB-Cハブを見る

※ Amazon広告リンク