Từ java 8 trở về trước, interface chỉ có abstract method, việc implement các method này sẽ nằm ở các class khác. Khi project của bạn đã trở nên quá lớn, một interface của bạn có hàng tá class implement và nếu bạn thêm một abstract method vào thì điều đó sẽ dẫn đến bạn phải đi triển khai method đó trong hàng tá các class kia có khi có những class không cần dùng đến.
Để giải quyết vấn đề trên java 8 đưa ra một khái niệm default method được triển khai ngay tạo interface giảm thiểu sự ảnh hưởng đến các class khác.
Ví dụ
interface TestInterface { void square(int a); default void show() { System.out.println("Default Method Executed"); } } class TestClass implements TestInterface { public void square(int a) { System.out.println(a * a); } public static void main(String args[]) { TestClass d = new TestClass(); d.square(30); d.show(); } }
Output
900
Default Method Executed
Override default method
Default method trong interface có thể được override bởi các class implement từ nó.
interface TestInterface { void square(int a); default void show() { System.out.println("Default Method Executed"); } } class TestClass implements TestInterface { public void square(int a) { System.out.println(a * a); } @Override public void show() { System.out.println("Override default methof"); } public static void main(String args[]) { TestClass d = new TestClass(); d.square(30); d.show(); } }
Output:
900
Override default methof
Default method được java giới thiệu để giúp tương thích với các interface trong các phiên bản java trước đó. Nếu bạn đang bắt đầu viết java 8 theo ý kiến cá nhân mình thì nên hạn chế việc sử dụng default method mà thay thế bằng các cách khác như sử dụng method trong abstract class etc.