Java 8 giới thiệu một khái niệm mới về triển khai thực hiện phương thức mặc định trong các interface. Khả năng này được bổ sung cho khả năng tương thích ngược để các interface cũ có thể được sử dụng để tận dụng khả năng biểu thức lambda của Java 8.
Ví dụ: interface List hoặc Collection không có khai báo phương thức forEach(). Do đó, việc thêm phương thức như vậy sẽ đơn giản phá vỡ các triển khai framework. Java 8 giới thiệu phương thức mặc định để interface List / Collection có thể thực hiện mặc định phương thức forEach() và lớp triển khai thực hiện các interface này không cần buộc override chúng.
Cú pháp:
Với các hàm default trong các interface, có khả năng là một lớp đang triển khai hai interface với cùng các phương thức mặc định. Đoạn mã sau giải thích sự mơ hồ này có thể được giải quyết như thế nào.
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!"); } } |