カテゴリ: JavaSilver試験対策 更新日: 2025/03/09

Javaの抽象クラス徹底解説!基本から応用まで初心者向けガイド

047
Javaの抽象クラス

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

生徒

「抽象クラスって何ですか?インタフェースとの違いも教えてください!」

先生

「抽象クラスは、クラスとインタフェースの性質を合わせ持ったものです。共通する実装を持たせつつ、具体的な処理はサブクラスに任せることができます。一緒に学んでいきましょう!」

1. 抽象クラスとは?

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

抽象クラスは、Javaでオブジェクト指向プログラミングを行う際に重要な役割を果たすクラスです。abstractキーワードを使って定義され、以下の特徴を持ちます:

  • 抽象クラスはインスタンス化できません。
  • 具象メソッド(具体的な実装を持つメソッド)と抽象メソッド(実装を持たないメソッド)の両方を定義できます。
  • 抽象クラスは、サブクラスに共通の動作を提供するために使用されます。

次の例を見てみましょう:


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

    public void sleep() { // 具象メソッド
        System.out.println("Sleeping...");
    }
}

このコードでは、Animalクラスに抽象メソッドmakeSoundと具象メソッドsleepが定義されています。

2. 抽象クラスの継承と実装

2. 抽象クラスの継承と実装
2. 抽象クラスの継承と実装

抽象クラスを継承するクラスは、その抽象メソッドを実装する必要があります。以下に例を示します:


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

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.makeSound(); // 出力: Woof Woof!
        dog.sleep();     // 出力: Sleeping...
    }
}

このコードでは、DogクラスがAnimalクラスを継承し、makeSoundメソッドを実装しています。

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

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

抽象クラスとインタフェースは似ていますが、以下の違いがあります:

  • 抽象クラスは具象メソッドとフィールドを持つことができますが、インタフェースは基本的に定数フィールドと抽象メソッドのみを持ちます(Java 8以降、一部例外あり)。
  • クラスは1つの抽象クラスしか継承できませんが、複数のインタフェースを実現できます。
  • 抽象クラスは共通の動作を提供し、インタフェースは「型」としての役割を強調します。

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

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

※ Amazon広告リンク

4. 試験対策ポイント

4. 試験対策ポイント
4. 試験対策ポイント
  • 抽象クラスはインスタンス化できません。
  • 抽象メソッドは、具象クラスが必ず実装しなければなりません。
  • 抽象クラスを継承した抽象クラスも作成できます。
  • 公開フィールドにはサブクラスから自由にアクセスできます。

5. まとめ

5. まとめ
5. まとめ

今回は、Javaの抽象クラスについて基本から応用まで解説しました。抽象クラスは、インスタンス化できないため継承専用ですが、共通の機能をサブクラスに提供する重要な役割を持っています。また、抽象メソッドを使用することで、サブクラスに具体的な実装を強制できます。 抽象クラスとインタフェースの違いについても学びましたが、それぞれの特徴を理解して使い分けることが重要です。

以下は、抽象クラスを活用した簡単なサンプルコードです:


public abstract class Vehicle {
    public abstract void start();

    public void stop() {
        System.out.println("The vehicle stops.");
    }
}

public class Car extends Vehicle {
    @Override
    public void start() {
        System.out.println("The car starts with a key.");
    }
}

public class Main {
    public static void main(String[] args) {
        Vehicle myCar = new Car();
        myCar.start(); // 出力: The car starts with a key.
        myCar.stop();  // 出力: The vehicle stops.
    }
}

このコードでは、Vehicleクラスを抽象クラスとして定義し、サブクラスCarが抽象メソッドstartを実装しています。

先生と生徒の振り返り会話

生徒

「抽象クラスって、具体的な実装と抽象的なメソッドを混ぜられるのが便利ですね!」

先生

「その通りです。継承関係を設計するときに、抽象クラスを使うと共通の動作を簡単にまとめられますよ。」

生徒

「インタフェースとの違いもわかりました。複数のインタフェースを実現する場合と、抽象クラスを1つだけ継承する場合の使い分けが重要なんですね。」

先生

「その通り!抽象クラスとインタフェースを適切に使い分けて、効率的なコードを書いていきましょう。」

JavaSilver試験対策の一覧へ
新着記事
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広告リンク