無理しないでゆっくり休んでね!

【Java】AbstractクラスとInterfaceの違い

Javaプログラミングにおいて、抽象クラス(Abstractクラス)とインターフェース(Interface)は重要な概念です。

これらは、オブジェクト指向プログラミングの基盤となる多態性(ポリモーフィズム)を実現するために使用されます。しかし、これらの使い方や適用範囲は異なります。本記事では、抽象クラスとインターフェースの違いについて詳しく解説します。

Abstractクラスとは

定義

抽象クラスは、インスタンス化できないクラスのことです。

部分的に実装を含むことができ、他のクラスによって継承されるための基礎となります。

特徴

  1. メソッドの実装:抽象クラスは具体的なメソッドの実装を含むことができます。
  2. コンストラクタ:抽象クラスはコンストラクタを持つことができます。
  3. フィールド:フィールドを持つことができます。
  4. アクセス修飾子:抽象メソッドおよび具体的なメソッドにアクセス修飾子を設定できます。

使用例

public abstract class Animal {
    // 具体的なメソッド
    public void eat() {
        System.out.println("This animal eats food.");
    }

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

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

Interfaceとは

定義

インターフェースは、クラスが実装しなければならないメソッドのセットを定義するために使用されます。

インターフェース自体はメソッドの実装を持つことができません(ただし、Java 8以降はデフォルトメソッドを持つことができます)。

特徴

  1. メソッドの実装:通常、メソッドの実装を含むことができませんが、デフォルトメソッドとして提供することができます。
  2. 多重継承:クラスは複数のインターフェースを実装することができます。
  3. フィールド:フィールドは基本的に public static final として宣言される定数のみを持つことができます。

使用例

public interface Animal {
    void makeSound();
}

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

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

機能抽象クラスインターフェース
メソッドの実装具体的なメソッドの実装が可能基本的にメソッドの実装不可(デフォルトメソッド除く)
フィールド任意のフィールドを持つことが可能定数のみ public static final
コンストラクタありなし
継承1つのクラスのみ継承可能複数のインターフェースを実装可能
アクセス修飾子ありなし(全て public

まとめ

抽象クラスとインターフェースは、Javaプログラミングにおいて異なる目的を持っています。

抽象クラスは、部分的な実装を共有するために使用され、インターフェースはクラスが実装すべきメソッドのセットを定義します。これらを適切に使い分けることで、柔軟で再利用可能なコードを作成することができます。

コメント

タイトルとURLをコピーしました