016 抽象クラス(基本概念) 001 解答例

// 抽象クラス Animal の定義
abstract class Animal {
    // 抽象メソッド makeSound() の宣言
    public abstract void makeSound();
}

// 具象クラス Dog の定義
class Dog extends Animal {
    // makeSound() メソッドの実装
    @Override
    public void makeSound() {
        System.out.println("ワンワン");
    }
}

// 具象クラス Cat の定義
class Cat extends Animal {
    // makeSound() メソッドの実装
    @Override
    public void makeSound() {
        System.out.println("ニャー");
    }
}

// メインクラス
public class Main {
    public static void main(String[] args) {
        // Dog クラスのインスタンスを作成して makeSound() メソッドを呼び出す
        Dog myDog = new Dog();
        myDog.makeSound();

        // Cat クラスのインスタンスを作成して makeSound() メソッドを呼び出す
        Cat myCat = new Cat();
        myCat.makeSound();
    }
}

このコードでは、Animal クラスが抽象クラスとして、makeSound() メソッドが抽象メソッドとして宣言されています。そして、Dog クラスと Cat クラスがそれぞれ Animal クラスを継承し、makeSound() メソッドをオーバーライドしています。main メソッドでは、それぞれのクラスのインスタンスを作成して makeSound() メソッドを呼び出し、吠え声や鳴き声が表示されることを確認しています。

抽象クラス

抽象クラスは、Javaのオブジェクト指向プログラミングにおいて、また、クラスの設計において共通の機能を提供するための概念です。以下に、抽象クラスの基本概念を解説します。

抽象クラスの定義:

抽象クラスは、abstract キーワードを使用して定義されます。抽象クラスには抽象メソッド(実装がないメソッド)が含まれることがあります。
抽象クラスは直接インスタンスを生成することはできず、具象クラス(実際にインスタンスを生成できるクラス)を通じて利用されます。

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


抽象メソッド:

抽象クラスには抽象メソッドが含まれることがあります。抽象メソッドはメソッドの宣言だけがあり、実際の実装はサブクラスに委ねられます。
抽象メソッドは abstract キーワードを含み、末尾にセミコロンがつきます。

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

サブクラスの継承と実装:

抽象クラスを継承するサブクラスは、抽象メソッドをオーバーライド(実装)する必要があります。これが強制され、サブクラスが共通の機能を提供できるようになります。

class Dog extends Animal {
    // 抽象メソッドの実装
    @Override
    public void makeSound() {
        System.out.println("ワンワン");
    }
}

抽象クラスのインスタンス化の制約:

抽象クラスは直接インスタンスを生成できません。具象クラスを通じて、サブクラスのインスタンスを生成して使用します。

Animal myAnimal = new Dog(); // これは有効
Animal invalidAnimal = new Animal(); // これはエラー


多重継承の制約:

Javaでは単一継承しか許されていません。抽象クラスを介した継承は、他のクラスとの多重継承の代替手段として使用されます。

abstract class Animal { /* ... */ }
class Dog extends Animal { /* ... */ }
// class Cat extends Animal, SomeOtherClass; // これはエラー(多重継承が不可)

抽象クラスは、クラス間で共通の機能や振る舞いを抽象化し、サブクラスに共通の基盤を提供する際に有用です。これによりコードの再利用性が向上し、メンテナンスや拡張がしやすくなります。

「016 抽象クラス」問題集リスト