Default method có làm phai nhạt đặc tính của interface

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.

0 0 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x