インターフェイスのJava8静的メソッド
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!"); } }
出力
I am a vehicle! I am a four wheeler! Blowing horn!!! I am a car!
-
インターフェイスのJava8デフォルトメソッド
Java 8では、インターフェースにデフォルトのメソッド実装の新しい概念が導入されています。この機能は下位互換性のために追加されているため、古いインターフェースを使用してJava8のラムダ式機能を活用できます。 たとえば、「List」または「Collection」インターフェースには「forEach」メソッド宣言がありません。したがって、このようなメソッドを追加すると、コレクションフレームワークの実装が壊れてしまいます。 Java 8ではデフォルトのメソッドが導入されているため、List / CollectionインターフェースはforEachメソッドのデフォルトの実装を持つことができ、これ
-
Javaでの静的バインディングと動的バインディング
はい!コンパイラは、メソッドの実行に使用するオブジェクトを知っている場合、参照をオブジェクトに静的にバインドできます。たとえば、静的変数、プライベート変数、final変数は静的バインディングを使用しています。一方、オブジェクトの識別が実行時に行われる場合は、動的バインディングが使用されます。メソッドのオーバーライドは動的バインディングの場合です。 一方、メソッドのオーバーロードは静的バインディングの場合です。