Default Method là gì? Phương pháp này có giúp ích gì cho Java 8? Nếu đang thắc mắc điều này, hãy cùng tìm hiểu tại bài viết sau nhé!
Như chúng ta đã biết, từ java 7 đổ xuống, trong các method trong interface sẽ chỉ được phép miêu tả (declaration) mà không được phép định nghĩa nó (definition). Nhưng đối với java 8, sẽ xuất hiện thêm 2 khái niệm mới về interface, đó là default method.
Tìm hiểu Default Method
- Cách viết:
Public interface DAO{
default void log(String mss){
System.out.println(“hi “ + mss);
}
}
Tại đó chúng ta có thể viết, định nghĩa method. Khi 1 lớp interface extends, lớp interface đó có 3 lựa chọn:
- Có thể không override default method đó
- Có thể override rồi viết lại định nghĩa cho nó
- Có thể đổi từ default method sang abstract
Nếu một abstract class/concrete class implements từ interface IDBManager trên thì người dùng chỉ có 2 sự lựa chọn:
- Nếu không làm gì với method log(message) thì method log() sẽ được thừa kế từ interface.
- Có thể overriden lại method log(message) nhưng method phải ở dạng abstract hoặc bình thường (không có default method cho class)
- Ví dụ:
public abstract class AbstractDBManager implements IDBManager{
public abstract void log(String message);
}
public class BearDBManager implements IDBManager{
public void log(String message){
System.out.println(“BEAR: ” + message);
}
}
- Mục đích
Giả sử trong quá trình phát triển, người ta muốn bổ sung một method vào interface là search(message) cho phép tìm kiếm thông tin sinh viên, như vậy như ở phiên bản java 7, nếu thêm 1 method vào interface thì bắt buộc phải sửa chữa tất cả các concrete classes implement từ interface đó, cụ thể ở đây là ta phải implement method search (message) .
VD:
Với java 8, muốn thêm vào 1 method trong interface, ta chỉ việc đặt từ khoá default vào như sau:
public interface IDBManager{
//————————
public default void Search(String message){
//—————————————-
}
}
Tất cả các classes implements từ DAOsv sẽ được kế thừa method Search (message) và chúng ta không phải sửa chữa lại các classes đó. Mục đích của default method ra đời là để bổ sung thêm các method vào interface mà không phải thay đổi những implementation code trước đây (đảm bảo tính tương thích).
- Lợi ích:
Trong quá trình phát triển, nếu chúng ta muốn thêm một vài method nữa vào trong lớp interface thì sẽ phải thêm một method vào interface ở những Java trước, khi đó, toàn bộ những lớp nào implements interface cần sẽ phải override method đó nữa. Điều này gây ra nhiều sự bất tiện. Còn ở trong java 8, chúng ta chỉ cần để method thành dạng default method là được. Class nào cần dùng có thể override, nếu không thì không sao cả.
Một trong những tiện ích lớn nhất của default method đó là: Sử dụng trong việc dùng Comparator với Comparator.comparing() và Comparator.thenComparing()
Ví dụ: ở những java phiên bản trước, người dùng sẽ phải:
Còn ở java 8 thì tiện lợi hơn nhiều:
Một số lưu ý khi sử dụng default method
Khi 1 class implement 2 interface khác nhau nhưng có tên giống nhau, compiler của java sẽ báo lỗi vì không xác định được default method nào sẽ được chọn trong nhiều default method giống khai báo.
Nếu chúng ta overriden 1 method của java.lang.Object như equals, trình biên dịch sẽ thông báo cho chúng ta 1 error “A default method cannot override a method from java.lang.Object”, Java 8 không cho phép override method của Object dưới dạng default method.
Các bạn đã hiểu được nhiều điều về Default Method rồi chứ? Chúc các bạn áp dụng thành công những kiến thức này nhé!
Bộ môn Phát triển phần mềm
Cao đẳng FPT Mạng cá cược bóng đá Hà Nội