Bạn đã biết đến hai khái niệm quan trọng trong lập trình Java, đó là Interface và Abstraction Class. Nhưng liệu bạn đã hiểu rõ về công dụng và lợi ích của chúng, cũng như sự khác nhau giữa chúng và cách phân biệt ra sao?
1. Khái quát về Interface và Abstraction Class
Interface là một kiểu dữ liệu tham chiếu chỉ chứa hằng số và tên các phương thức, không có phần phương thức trừu tượng tương tự với class. Tuy nhiên, Interface thể hiện các hành động của lớp đó, trong khi class thể hiện cả thuộc tính và hành động của đối tượng. Interface không thể được khởi tạo mà chỉ có thể kế thừa từ các Interface khác.
Abstraction Class là một lớp trừu tượng trong Java. Nó có thể chứa cả phương thức trừu tượng và không trừu tượng, nhưng không thể được khởi tạo mà cần kế thừa và triển khai các phương thức.
2. Phân biệt Interface và lớp trừu tượng (Abstraction Class)
Interface và Abstraction Class đều có thể chứa phương thức trừu tượng và không thể khởi tạo đối tượng. Tuy nhiên, điểm khác biệt cơ bản của Interface và Abstraction Class như sau:
-
Abstract class:
- Có các phương thức trừu tượng và không trừu tượng.
- Không hỗ trợ đa kế thừa.
- Có thể tồn tại các biến final và non-final, static và non-static.
- Có thể kế thừa Interface.
-
Interface:
- Chỉ có duy nhất phương thức trừu tượng.
- Hỗ trợ đa kế thừa.
- Chỉ có các biến static và final.
- Không thể kế thừa lớp abstract.
3. Khi nào bạn nên dùng Interface và Abstraction Class?
Bạn nên sử dụng Interface trong các trường hợp sau:
- Bạn muốn cụ thể hóa hành vi của một loại dữ liệu cụ thể nhưng không bận tâm ai sẽ triển khai hành vi đó.
- Bạn muốn sử dụng nhiều loại kế thừa.
- Cần cung cấp các chức năng chung cho các lớp khác nhau.
- Cần tổng hợp các đối tượng dựa trên các hành vi phổ biến.
- Bạn muốn sử dụng đa hình vì một lớp có thể thực hiện nhiều interfaces.
- Cần tạo nên các thành phần được kết nối rời rạc, dễ bảo trì và dùng chúng như 1 plugin vì việc implements cho interface được tách biệt với nó.
Đối với Abstraction Class, bạn có thể cân nhắc sử dụng trong những trường hợp sau:
- Bạn cần cung cấp các phương thức mặc định hay phổ biến mà nhiều lớp dẫn xuất có thể triển khai.
- Cần tạo ra nhiều phiên bản với các thành phần. Bạn có thể bổ sung thêm các thuộc tính và phương thức vào Abstraction Class với các lớp kế thừa được cập nhật tự động.
- Bạn muốn chia sẻ code giữa các lớp có liên quan.
- Bạn mong muốn những lớp trừu tượng extend có chung nhiều trường/method hoặc yêu cầu truy cập bộ điều chỉnh thay vì public nó.
Bài viết trên đã giải đáp các vấn đề về Interface và Abstraction Class, cũng như điểm khác biệt giữa hai phương thức này. Hy vọng qua bài viết này, bạn sẽ có cái nhìn rõ hơn về chúng. Nếu bạn có bất kỳ đóng góp gì, đừng quên để lại bình luận ở dưới đây.
Nguồn: FUNiX
Xem thêm: 10 Lý do hàng đầu để học JavaScript làm ngôn ngữ lập trình nền tảng
Nếu bạn đang có nhu cầu học lập trình trực tuyến, tìm hiểu ngay tại đây:
- ngôn ngữ lập trình java : Hướng dẫn cho người mới bắt đầu về Java
- Có nên lập trình game bằng C++, C#, Java và JavaScript?
- Hỏi đáp về ngôn ngữ JavaScript cùng lập trình viên
- Những trung tâm dạy học lập trình java trực tuyến trong vòng 6 tháng
- Cách sử dụng Package và Collection có sẵn trong Java
Phạm Thị Thanh Ngọc