Sự trưởng thành của Interface qua các phiên bản Java và Kotlin

Tram Ho

Trong Java hay Kotlin đều không có đa kế thừa, để khắc phục được điều này, các lập trình viên đã sử dụng interface

Mặc dù vẫn còn những hạn chế nhất định khi sử dụng interface nhưng qua nhiều phiên bản của Java và Kotlin, interface đã ngày càng mạnh mẽ theo thời gian

Hôm nay chúng ta sẽ cùng nhau nhìn xem interface sẽ có những tính năng gì nổi bật qua các phiên bản nhé

1. Interface trong Java 7

Trong Java 7, một interface chỉ có thể khai báo 2 loại :

  1. Hằng số (Constant Variables)
  2. Phương thức trừu tượng (Abstract Method)

Những phương thức của interface trong phiên bản này không được phép có thân hàm

Class implement interface đều phải cài đặt lại những phương thức trong interface

Bây giờ hãy cùng mình xét một bài toán nho nhỏ: Có 3 class A, B, C cùng implement interface OnCheckNumberListener

Khi ấy, cả 3 class A, B, C đều phải cài đặt phương thức isEvenNumber()như sau:

Rõ ràng thấy, phương thức isEvenNumber() bắt buộc phải viết lại ở cả 3 class A, B, C nhưng nội dung của chúng thì giống nhau hoàn toàn

Nếu làm như vậy sẽ không thể tối ưu tính tái sử dụng mã nguồn được

Để giải quyết vấn đề trên, ở Java 7, chúng ta có thể tạo ra 1 lớp abstract để cài đặt phương thức isEvenNumber()

Và lúc này, ở 3 class A, B, C sẽ không phải cài đặt lại phương thức isEvenNumber khi extends class CheckNumber

Cách này có vẻ khả quan, nhưng hãy nhớ 1 điều rằng, Java không có hỗ trợ đa kế thừa, vì thế cách này chỉ khả thi khi A, B, C chưa kế thừa lớp cha nào trước đó mà thôi.

2. Interface trong Java 8

Trong Java 8, ngoài hằng số và những phương thức abstract, chúng ta có thể khai báo những phương thức mặc định (default methods) và phương thức tĩnh (static methods)

  1. Hằng số (Constant Variables)
  2. Phương thức trừu tượng (Abstract Method)
  3. Phương thức mặc định (Default method)
  4. Phương thức tĩnh (Static method)

Có lẽ với sự cải tiến này trong Java 8, chúng ta sẽ không cần phải tạo một lớp abstract class CheckNumber nữa, mà có thể cài đặt luôn trong interface

Tuy nhiên, không phải lúc nào hàm default của chúng ta cũng ngắn gọn, chúng có thể rất dài mà chúng ta muốn tách nó ra làm nhiều hàm nhỏ hơn

Khi ấy, vì chúng đang ở trong 1 interface nên những hàm tách ra ấy sẽ phải là public, mà điều này thì có vẻ không phải là thứ mà chúng ta mong muốn

3. Interface trong Java 9

Java 9 đã giới thiệu các phương thức private và phương thứcprivate static trong các interface.

  1. Hằng số
  2. Phương thức abstract
  3. Phương thức default
  4. Phương thức static
  5. Phương thức private
  6. Phương thức private static

Kết luận

Qua đó các bạn có thể thấy, Interface ngày càng được cải thiện qua nhiều phiên bản, hỗ trợ rất nhiều đặc biệt có thể khắc phục triệt để hơn nhước điểm không hỗ trợ đa kế thừa của nó
Ở bài tiếp theo, chúng ta hãy cùng nhau thảo luận xem Interface trong Kotlin sẽ có những điểm nào nổi bật nhé.

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo