Java 8インターフェースのデフォルトメソッドとは?基本と実装例を解説
Java 8では、インターフェースに「デフォルトメソッド」という新しい概念が導入されました。これは主に後方互換性(下位互換性)を保つために追加された機能で、既存のインターフェースを壊すことなく、Java 8のラムダ式の恩恵を受けられるようにするためのものです。
例えば、従来のListやCollectionインターフェースにはforEachメソッドが宣言されていませんでした。ここに新しくメソッドを追加すると、これらのインターフェースを実装しているすべてのコレクションフレームワークの実装クラスがコンパイルエラーになってしまいます。
そこでJava 8ではデフォルトメソッドが導入され、ListやCollectionインターフェース側にforEachメソッドのデフォルト実装を持たせられるようになりました。その結果、これらのインターフェースを実装するクラスは、同じメソッドを改めて実装する必要がなくなります。
デフォルトメソッドの実装例
以下のサンプルコードでは、VehicleとFourWheelerという2つのインターフェースが、それぞれ同名のデフォルトメソッドprint()を持っています。両方を実装するCarクラスでは、InterfaceName.super.method()という構文を使って、どちらのインターフェースの実装を呼び出すかを明示的に指定しています。また、静的メソッドblowHorn()はインターフェース名を通じて直接呼び出せる点にも注目してください。
public class Java8Tester {
public static void main(String args[]) {
Vehicle vehicle = new Car();
vehicle.print();
}
}
interface Vehicle {
default void print() {
System.out.println("I am a vehicle!");
}
static void blowHorn() {
System.out.println("Blowing horn!!!");
}
}
interface FourWheeler {
default void print() {
System.out.println("I am a four wheeler!");
}
}
class Car implements Vehicle, FourWheeler {
public void print() {
Vehicle.super.print();
FourWheeler.super.print();
Vehicle.blowHorn();
System.out.println("I am a car!");
}
}
実行結果
I am a vehicle! I am a four wheeler! Blowing horn!!! I am a car!
ポイントまとめ
- defaultキーワード: インターフェース内のメソッドに
defaultを付けることで、実装を持たせられます。 - 競合の解決: 複数のインターフェースに同名のデフォルトメソッドがある場合は、実装クラス側でオーバーライドし、
InterfaceName.super.method()で明示的に呼び分けます。 - 静的メソッド: Java 8以降、インターフェースにも静的メソッドを定義でき、
InterfaceName.method()の形式で呼び出せます。 - 後方互換性: 既存の実装クラスに影響を与えずに、インターフェースへ新しい機能を追加できます。
-
Javaのデフォルトメソッドを使ってダイヤモンド問題を解決する方法
継承(Inheritance)とは 継承とは、あるクラスが別のクラスの性質(プロパティやメソッド)を受け継ぐ、2つのクラス間の関係のことです。この関係は extends キーワードを使って次のように定義します。 public class A extends B{ } 性質を受け継ぐ側のクラスは「サブクラス(子クラス)」、受け継がれる側のクラスは「スーパークラス(親クラス)」と呼ばれます。 継承が行われると、スーパークラスのメンバーのコピーがサブクラスのオブジェクト内に作成されます。そのため、サブクラスのオブジェクトを使えば、親クラスと子クラスの両方のメンバーにアクセスすることが可能です。 多重
-
Java 9のJShellでデフォルトエディタを変更する方法
JShellは、Java 9から導入されたREPL(Read-Evaluate-Print Loop)ツールです。コマンドラインからコードを読み込み、入力されたスニペットを評価し、その結果を画面に出力してくれます。 JShellのデフォルトエディタを変更する手順 JShellでは、デフォルトの「JShell Editor Pad」を使ってコードを編集できます。さらに、「/set」コマンドを使用すれば、デフォルトエディタを別のものに変更することも可能です。「/edit」コマンドを実行すると、設定されたエディタが起動されます。エディタを変更するには、次のコマンドを実行します。 /set edito