Java 9でインターフェースにプライベートメソッドが導入された理由とは?
Java 8以降、インターフェースはデフォルトメソッド(default methods)をサポートするようになりました。しかし、複数のデフォルトメソッドの間で共通する処理が発生することは少なくありません。そのような場合には、共通部分を別のデフォルトメソッドとして切り出すことで、コードの再利用性を高めることができます。
ところが、その共通コードが機密性の高い処理である場合、デフォルトメソッドに実装するのは好ましくありません。なぜなら、デフォルトメソッドはインターフェースを実装するすべてのクラスからアクセスできてしまうためです。
この課題を解決するために、Java 9からはインターフェース内にプライベートメソッドを定義できるようになりました。プライベートメソッドは同一のクラスまたはインターフェースの内部からしか参照できないため、機密性の高い共通処理はプライベートメソッドとして隠蔽するのが推奨されます。これこそが、Java 9でインターフェースにプライベートメソッドが追加された主な理由です。
構文
private void methodName() {
// 実行したい処理
}
サンプルコード
interface Operation {
default void addition() {
System.out.println("default method addition");
}
default void multiply() {
division();
System.out.println("default method multiply");
}
private void division() { // プライベートメソッド
System.out.println("private method division");
}
}
class PrivateMethodTest implements Operation {
public static void main(String args[]) {
PrivateMethodTest test = new PrivateMethodTest();
test.multiply();
}
}
実行結果
private method division default method multiply
ポイントまとめ
- Java 8で導入されたデフォルトメソッドは、実装クラスからもアクセス可能
- Java 9のプライベートメソッドは、インターフェース内部からのみ呼び出し可能
- 静的(static)なプライベートメソッドも定義できる
- 共通処理の重複を排除しつつ、カプセル化を実現できる
-
Java 8インターフェースのデフォルトメソッドとは?基本と実装例を解説
Java 8では、インターフェースに「デフォルトメソッド」という新しい概念が導入されました。これは主に後方互換性(下位互換性)を保つために追加された機能で、既存のインターフェースを壊すことなく、Java 8のラムダ式の恩恵を受けられるようにするためのものです。 例えば、従来のListやCollectionインターフェースにはforEachメソッドが宣言されていませんでした。ここに新しくメソッドを追加すると、これらのインターフェースを実装しているすべてのコレクションフレームワークの実装クラスがコンパイルエラーになってしまいます。 そこでJava 8ではデフォルトメソッドが導入され、ListやCo
-
Javaのインターフェースとは?基本構文からクラスとの違いまで徹底解説
Javaのインターフェースとはインターフェースは、Javaにおける参照型の一つで、クラスとよく似た性質を持っています。その本体は抽象メソッドの集まりであり、クラスがインターフェースを実装することで、その抽象メソッドを引き継ぐ仕組みになっています。抽象メソッドに加えて、インターフェースには定数、デフォルトメソッド、静的メソッド、ネストされた型を含めることも可能です。ただし、メソッドの本体(処理内容)が存在するのは、デフォルトメソッドと静的メソッドのみです。インターフェースの記述方法はクラスと似ていますが、両者の役割は異なります。クラスがオブジェクトの属性や振る舞いを記述するのに対し、インターフェ