インターフェースでdefaultメソッドおよびを定義する

広告

インターフェースでは抽象メソッドだけを定義することができましたが、Java8 以降では処理内容を記述したメソッドも定義できるようになりました。このようなメソッドを default メソッドと呼びます。 default メソッドを使用することで、インターフェースを実装したすべてのクラスで共通してメソッドを利用できるようになります。またあとからインターフェースにメソッドを追加したい場合でも、インターフェースを実装したすべてのクラスでオーバーライドして実装する必要がなくなります。ここではオブジェクト指向における default メソッドの使い方について解説します。

defaultメソッドとは

インターフェースでは通常、処理内容を持たないメソッドを定義しますが、 Java8 以降では処理内容を持つメソッドを定義することもできるようになりました。このようなメソッドを default メソッドと呼びます。

default メソッドを使用すると、インターフェースの中に処理内容を持つメソッドを定義することができます。

default メソッドは default キーワードを使用して定義します。

default 戻り値の型 メソッド名(引数) {
  // 処理内容
}

default メソッドはインターフェースを実装したクラスからそのまま利用することができます。

次の例ではインターフェースの中に default メソッドを定義しています。

interface Product {
  default void showInfo() {
    System.out.println("商品情報を表示します");
  }
}

このように default キーワードを付けることで、インターフェースの中に処理内容を持つメソッドを定義することができます。またインターフェースを実装したクラスで、 default メソッドをオーバーライドすることもできます。

defaultメソッドの利用

default メソッドはインターフェースを実装したクラスで特に実装しなくても、そのまま利用することができます。

interface Product {
  default void showInfo() {
    System.out.println("商品情報を表示します");
  }
}

class Foods implements Product {
}

public class Sample {
  public static void main(String[] args) {
    Foods f = new Foods();
    f.showInfo();
  }
}

この場合 Foods クラスでは showInfo メソッドを実装していませんが、インターフェースで定義された default メソッドが呼び出されます。

defaultメソッドのオーバーライド

default メソッドは、インターフェースを実装したクラスでオーバーライドすることもできます。

interface Product {
  default void showInfo() {
    System.out.println("商品情報を表示します");
  }
}

class Foods implements Product {
  public void showInfo() {
    System.out.println("食料品です");
  }
}

public class Sample {
  public static void main(String[] args) {
    Foods f = new Foods();
    f.showInfo();
  }
}

このようにインターフェースで定義された default メソッドは、必要に応じてクラス側でオーバーライドして処理内容を変更することができます。

-- --

オブジェクト指向における default メソッドの使い方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。