工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Java インターフェース vs 抽象クラス:適切な抽象化の選び方

インターフェースとは?

Java におけるインターフェースは、クラスが実装できる契約を定義します。インターフェースで宣言されるすべてのメソッドはデフォルトで抽象的であり、本体を持ちません。インターフェースは直接インスタンス化できず、振る舞いを記述するだけです。

インターフェースはインスタンス変数を保持できませんが、public static final 修飾子で定数を宣言できます。

抽象クラスとは?

抽象クラスはインスタンス化できないクラスで、抽象メソッド(本体なし)と具象メソッド(実装あり)の両方を含められます。少なくとも1つの抽象メソッドが必要です。

抽象クラスはサブクラスの青写真として機能し、親が定義した抽象メソッドを子が実装しなければなりません。

インターフェースと異なり、抽象クラスはインスタンスフィールドで状態を保持でき、デフォルト振る舞いを提供できます。

なぜインターフェースを使うか?

なぜ抽象クラスを使うか?

インターフェース vs 抽象クラス

両方とも契約定義に役立ちますが、実装と用途が異なります。インターフェースはメソッド宣言のみ可能ですが、抽象クラスはデフォルト実装を提供できます。クラスは1つの抽象クラスしか継承できませんが、複数のインターフェースを実装できます。

観点 インターフェース 抽象クラス
ルックアップ速度 動的ディスパッチのため一般的に遅い 可能なら静的ディスパッチで高速
多重継承 複数インターフェース実装をサポート 単一継承のみ
メソッド本体 抽象のみ(Java 8 以前)または default/static(Java 8+) 抽象と具象の両方を含められる
状態 インスタンスフィールド宣言不可 インスタンスフィールドとコンストラクタ宣言可
ユースケース 無関係なクラスに混入できる能力を定義 共有実装を持つ共通基盤を提供
メンバーのアクセス性 すべて暗黙的に public protected、public、private 可
他型の拡張 他インターフェースを拡張可能 クラスを拡張し、インターフェース実装可
コンストラクタ 定義不可 サブクラス用コンストラクタ定義可
定数 定数宣言可(public static final) 定数と通常フィールドの両方可

サンプルコード:Java のインターフェースと抽象クラス

以下はインターフェースと抽象クラスの宣言・使用例です。

インターフェース構文

interface Name {
    // メソッド宣言
}

Java インターフェース例

interface Pet {
    void test();
}
class Dog implements Pet {
    public void test() {
        System.out.println("Interface method implemented");
    }
    public static void main(String[] args) {
        Pet p = new Dog();
        p.test();
    }
}

抽象クラス構文

abstract class Name {
    // コード
}

抽象クラス例

abstract class Shape {
    int b = 20;
    abstract void calculateArea();
}
class Rectangle extends Shape {
    public static void main(String[] args) {
        Rectangle obj = new Rectangle();
        obj.b = 200;
        obj.calculateArea();
    }
    void calculateArea() {
        System.out.println("Area is " + (b * b));
    }
}

Java

  1. フォアハンド溶接 vs バックハンド溶接:違いと使い分け
  2. 鉄 vs 鋼:組成・特性・用途の決定的違い
  3. 切断釘 vs 線釘:建設用途での主要違いを理解する
  4. プラズマ切断 vs レーザー切断:違いと使い分け
  5. 旋盤面取り vs フライス面取り:主な違いを理解する
  6. フライス加工 vs 研削加工:主な違いを解説
  7. DC モーター vs AC モーター:構造の違いと用途別の選び方
  8. Java抽象クラスとメソッド:包括的ガイド
  9. Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
  10. Java抽象化完全ガイド: 抽象クラス・抽象メソッドで実装を隠蔽し設計を簡潔に
  11. Javaインターフェース完全ガイド: 定義・実装・多重継承・タグインターフェース