0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Java における抽象クラスとインタフェースの関係と使い分け

Posted at

Java のオブジェクト指向を学ぶ上で欠かせない概念が 抽象クラス(abstract class)とインタフェース(interface)です。本記事では、両者の違いや関係性、そして実践での使い分け方について分かりやすく解説します。

1. 抽象クラス(abstract class)とは

抽象クラスは、共通の性質や動作をまとめるための基底クラス(スーパークラス)です。
一部のメソッドを抽象メソッド(中身なし)として宣言し、サブクラスに実装を必須とさせることができます。

特徴

・abstract キーワードで宣言
・抽象メソッドを含めることができる
・フィールド(状態)を持てる
・具象メソッド(処理あり)も持てる
・単一継承(クラスの継承は1つのみ)

abstract class Animal {
    String name;   // フィールド(状態)

    abstract void makeSound();  // 抽象メソッド

    void eat() {                // 具象メソッド
        System.out.println(name + " is eating.");
    }
}

2. インタフェース(interface)とは

インタフェースは、クラスが実装すべき機能の仕様を定義するための型です。
Java8以降では、defaultメソッドやstaticメソッドも定義可能になり、柔軟性が増しています。

特徴

・interface キーワードで宣言
・フィールドはすべて public static final(定数)
・メソッドはデフォルトで public abstract
・Java8 以降:default・static メソッドを持てる
・Java9 以降:private メソッドも定義可能
・複数のインタフェースを実装できる

interface Flyable {
    void fly(); // 抽象メソッド(public abstract)
}

抽象クラスとインタフェースの違い(一覧表)

項目 抽象クラス インタフェース
フィールド あり(自由) 定数のみ
メソッド 抽象・具象どちらもOK 抽象 + default + static
コンストラクタ 持てる 持てない
継承・実装 クラスは1つのみ継承 複数のインタフェースを実装可
目的 共通の性質・状態をまとめる 共通の能力・API契約を示す

「関係性」

● 抽象クラスを選ぶとき
 ・共通の変数(状態)を持たせたいとき
 ・共通処理をまとめたいとき(具象メソッドが多い)
 ・クラス階層をデザインしたいとき(is-a の関係)

例:
Animal → Dog / Cat
Vehicle → Car / Bike

● インタフェースを選ぶとき
・共通の「能力」を表したい
・複数の型に共通の動作を与えたい
・API として契約を定義したい

例:
Flyable = 「飛べる」
Comparable = 「比較できる」
Runnable = 「実行できる」

両方を併用することもある

実際の開発では、以下のような使い分けが一般的です:
抽象クラス:基本となる共通機能を提供
インタフェース:追加機能や能力を付与

abstract class Animal {
    abstract void makeSound();
}
interface Flyable {
    void fly();
}

class Bird extends Animal implements Flyable {
    @Override
    void makeSound() { System.out.println("Chirp"); }

    @Override
    public void fly() { System.out.println("Flying"); }
}

7. まとめ

要点 内容
抽象クラス 共通の性質・状態・処理をまとめる基底クラス
インタフェース クラスが実装すべき能力・契約を定義する型
関係性 目的が異なるが、組み合わせることで柔軟な設計が可能
実務上の使い分け 状態=抽象クラス、契約=インタフェース、多重実装=インタフェース
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?