インターフェースでprivateメソッドを定義する

広告

インターフェースでは Java9 以降、 private メソッドを定義できるようになりました。 default メソッドや static メソッドの共通処理をまとめる補助メソッドが必要なときに従来は別の default メソッドを定義していましたが、 private メソッドを使用することでインターフェースの外部から呼び出せない補助メソッドとして利用することができます。ここではオブジェクト指向における private メソッドの使い方について解説します。

インターフェースのprivateメソッドとは

インターフェースでは Java8 以降、default メソッドや static メソッドを定義できるようになりました。さらに Java9 以降では、インターフェースの中で private メソッドを定義することもできるようになりました。

private メソッドはインターフェースの中で使用する補助的なメソッドとして定義されます。インターフェースを実装したクラスから呼び出すことはできません。主に default メソッドや static メソッドの処理を整理するために使用されます。

インターフェースの中で private メソッドを定義する場合は、アクセス修飾子として private を指定します。クラスのメソッドでアクセス修飾子として private を指定する場合と同じです。

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

インターフェースで定義した private メソッドは、インターフェースの内部でのみ使用できるメソッドです。インターフェースで定義した default メソッドや static メソッドからのみ呼び出すことができます。

privateメソッドの利用

次の例では default メソッドの中から private メソッドを呼び出しています。

interface Product {
  default void showInfo() {
    dispMessage();
  }

  private void dispMessage() {
    System.out.println("商品情報を表示します");
  }
}

class Foods implements Product {
}

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

この例では dispMessage メソッドを private メソッドとして定義しています。このメソッドは default メソッドの中から呼び出されていますが、インターフェースを実装したクラスのオブジェクトから呼び出すことはできません。

複数の default メソッドや static メソッドで同じような処理を記述する必要がある場合、以前は別の default メソッドを定義していました。しかし default メソッドの場合、インターフェースを実装したクラスからも呼び出すことができてしまいます。このような場合に private メソッドを使用して定義することで、インターフェースの外部から呼び出せない補助メソッドとして利用することができます。

-- --

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

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

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