Sự khác nhau giữa Abstract Class và Interface trong Java là gì? Cách sử dụng của hai hình thức này như thế nào? Để giải đáp những thắc mắc này, hãy cùng theo dõi bài viết dưới đây nhé!
Phân biệt Abstract Class và Interface trong Java
- Abstract Class
Các bạn có thể hiểu đây như một người cha, có những đặc tính và hành động chung, bao quát nhất dành cho các lớp con khác.
Một lớp abstract Xe sẽ có thuộc tính là động cơ, cùng với phương thức là khởi động và dừng động cơ. Tuy nhiên Xe là một cái gì đó khá trừu tượng, nó có thể là bất kì loại xe nào và khi đó các lớp con extends lại sẽ định nghĩa riêng cho từng lớp. Và khi đó người con (child class) chỉ có thể có duy nhất 1 lớp cha, có tính chất giống cha (abstract class) đó.
- Interface
Các bạn có thể hiểu Interface như một bản thiết kế, và bản thiết kế này sẽ liệt kê tất-cả-các-chức-năng cơ bản nhất mà một dự án cần sử dụng. Cơ chế của Interface cũng không khác gì bản hợp đồng, khi thực hiện bản hợp đồng này, ta sẽ phải tuân theo các điều khoản trong đó, không có ngoại lệ.
Mục đích của Interface là thể hiện tính đa hình, khả năng thực hiện các hành động khác nhau. Nếu bạn muốn thể hiện tính đa kế thừa thì dùng Interface. Ví dụ như mình muốn hỗ trợ người dùng thanh toán qua nhiều ngân hàng, mình sẽ tạo môt Interface PayMoney, sau đó nếu muốn bao nhiêu ngân hàng thì chỉ việc thực thi interface này thôi.
Nghe qua sẽ thấy dùng Interface bất tiện, giả sử có 10 class implements 2 Interface nhưng chỉ có 5 class cần thêm một chức năng nữa, liệu có phải viết lặp lại 5 lần trong mỗi class hay lại tạo 1 Interface mới cho riêng 5 class này?
Cách giải quyết này sẽ đúng khi áp dụng với Java 1, 2, 3, 4, 5, 6, 7. Với Java 8, chương trình này đã xuất hiện thêm phương thức default và static sẽ giải quyết vấn đề trên. Còn chưa kể 2 phương thức này còn có body code.
Từ trên, có thể thấy khi implements lại FirstInterface ta không cần implements default method.
Hiểu theo một cách ngắn gọn, khi một class extends một Abstract Class thì mối quan hệ này được gọi là is – a (Ô tô là Xe) , còn khi một class implements một Interface thì mối quan hệ này là can – do (Ô tô có thể chạy).
Kết thúc bài viết, mong rằng các bạn đã có thể hiểu được phần nào về khái niệm và phân biệt được Interface và Abstract Class. Chúc các bạn áp dụng thành công kiến thức này vào những bài tập thực hành của mình sắp tới nhé!