Java 8のインターフェースで使える静的メソッドの基本と実践例
Java 8におけるインターフェースの静的メソッドとは
Java 8以降、インターフェースには静的メソッド(staticメソッド)を定義できるようになりました。これにより、ユーティリティ的なヘルパーメソッドをインターフェース内に直接記述でき、関連する処理をひとまとめに管理しやすくなります。
静的メソッドは「インターフェース名.メソッド名()」の形式で呼び出すのが基本です。実装クラスのインスタンスからは直接呼び出せず、オーバーライドもできない点に注意しましょう。
静的メソッドを持つインターフェースの定義例
次の例では、Vehicleインターフェースにデフォルトメソッド print() と、静的メソッド blowHorn() を定義しています。
public interface vehicle {
default void print() {
System.out.println("I am a vehicle!");
}
static void blowHorn() {
System.out.println("Blowing horn!!!");
}
}実装クラスでの利用例
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!");
}
}この例では、Carクラスが Vehicle と FourWheeler の2つのインターフェースを実装しています。複数のインターフェースが同名のデフォルトメソッドを持つ場合は、Vehicle.super.print() のように明示的に呼び出し元を指定する必要があります。
また、静的メソッドは Vehicle.blowHorn() のようにインターフェース名を経由して呼び出している点にも注目してください。これはJava 8の静的メソッドならではの特徴です。
実行結果
I am a vehicle! I am a four wheeler! Blowing horn!!! I am a car!
押さえておきたいポイント
- Java 8以降、インターフェースには静的メソッドを定義できる。
- 静的メソッドは「インターフェース名.メソッド名()」の形式で呼び出す。
- 静的メソッドは実装クラス側で継承・オーバーライドできない。
- デフォルトメソッドが競合する場合は「InterfaceName.super.method()」で解決する。
-
Java 8インターフェースのデフォルトメソッドとは?基本と実装例を解説
Java 8では、インターフェースに「デフォルトメソッド」という新しい概念が導入されました。これは主に後方互換性(下位互換性)を保つために追加された機能で、既存のインターフェースを壊すことなく、Java 8のラムダ式の恩恵を受けられるようにするためのものです。 例えば、従来のListやCollectionインターフェースにはforEachメソッドが宣言されていませんでした。ここに新しくメソッドを追加すると、これらのインターフェースを実装しているすべてのコレクションフレームワークの実装クラスがコンパイルエラーになってしまいます。 そこでJava 8ではデフォルトメソッドが導入され、ListやCo
-
Javaにおける静的バインディングと動的バインディングの違いを徹底解説
静的バインディングと動的バインディングとは?Javaでは、メソッド呼び出しと実際の処理内容を結び付ける(バインドする)タイミングによって、「静的バインディング」と「動的バインディング」の2種類に分けられます。この仕組みを理解することは、ポリモーフィズム(多態性)や継承を正しく扱う上で非常に重要です。静的バインディング(早期バインディング)コンパイルの時点で、どのメソッドや変数が使用されるかが確定できる場合、コンパイラは参照を静的に結び付けます。これが静的バインディングです。具体的には、以下のような要素が静的バインディングの対象となります。static変数・staticメソッド:クラスレベルで管