Sự khác nhau giữa Interface và Abstraction Class là gì?

Sự khác nhau giữa Interface và Abstraction Class là gì? Cách phân biệt ra sao? Bài viết này sẽ giải đáp những vấn đề này để bạn có thể lựa chọn cách làm phù hợp nhất cho mỗi trường hợp trong lập trình.

1. Khái quát về Interface và Abstraction Class

Interface (hay giao diện) 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 (lớp). Tuy nhiên, class thường thể hiện các thuộc tính và hành động của đối tượng, còn Interface thể hiện các hành động của lớp đó. Cũng giống với các lớp, interface không thể được khởi tạo mà chỉ có thể mở rộng hoặc kế thừa từ các Interface khác.

Tính trừu tượng là một tiến trình làm ẩn các trình triển khai và chỉ hiển thị các tính năng quan trọng tới người dùng. Ví dụ: để gửi tin nhắn, người dùng chỉ cần soạn và gửi tin mà không hề biết tiến trình xử lý nội tại triển khai tin nhắn đó như thế nào. Nói cách khác, tính trừu tượng giúp bạn chú ý vào đối tượng thay vì quan tâm đến cách nó thực hiện.

Abstraction Class (AC) được hiểu là một lớp trừu tượng trong Java. AC trong trong Java có thể có các phương thức trừu tượng và không trừu tượng (phương thức với phần thân). Đặc biệt, nó không thể được khởi tạo mà cần kế thừa và tự triển khai phương thức.

Abstraction Class trong Java

Abstraction Class trong Java

2. Phân biệt Interface và lớp trừu tượng (Abstraction Class) 

Cả Interface và Abstraction class đều giống nhau ở điểm có thể chứa phương thức thuần ảo 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

Interface

Có các phương thức trừu tượng và không trừu tượng

Chỉ có duy nhất phương thức trừu tượng

Không hỗ trợ đa kế thừa

Hỗ trợ đa kế thừa

Có thể tồn tại các biến final và non-final, static và non-static

Chỉ có các biến static và final

Có thể extents (kế thừa) interface

Không thể kế thừa lớp abstract

Sử dụng từ khóa “abstract” để khai báo lớp trừu tượng

Sử dụng từ khóa “interface” để khai báo giao diện

Một lớp trừu tượng có thể extents một lớp Java khác và thực hiện nhiều interface khác nhau

Một interface chỉ có thể implements (cài đặt) nhiều interface khác

Có thể kế thừa bằng cách sử dụng từ khóa “extends”

Các lớp triển khai interface bằng cách sử dụng từ khóa “implements”

Một lớp trừu tượng có phạm vi truy cập ở dạng private, protected,…

Các phương thức, property của interface đều được mặc định ở dạng public

Có thể định nghĩa thân phương thức và property.

Chỉ có thể khai báo, không thể định nghĩa code xử lý.

3. Khi nào bạn nên dùng Interface và Abstraction Class?

Phân biệt Interface và Abstraction Class

Interface giúp bạn cụ thể hóa hành vi của một loại dữ liệu cụ thể, còn Abstraction Class giúp bạn chia sẻ code giữa các lớp có liên quan

Bạn nên sử dụng Interface trong các trường hợp như:

  • 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 rằng 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. Ví dụ: Interface Comparable và Cloneable.
  • 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 (components) đượ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:

  • Bạn cần cung cấp các phương thức mặc định hay các phương thức 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 (components). 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 với 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ững điểm khác biệt giữa hai phương thức này. FUNiX hy vọng qua bài viết này, bạn đọc sẽ có một cái nhìn rõ hơn về Interface, Abstract Class. Nếu bạn có bất kỳ đóng góp gì, đừng quên để lại bình luận ở dưới đây. 

Có thể bạn muốn đọc
Hướng dẫn đăng kí và cách kiếm Pi nhanh chóng.

Pi network là một cryptocurency mới và được khai thác chỉ trên điện thoại, nhưng đây là loại hình đào coin kỹ thuật số mới không tốn tài nguyên CPU như những app đào coin khác. Những app đào coin khác như ETN nó sẻ sử dụng CPU để giải mã thuật toán ( ETN sử dụng thuật toán cryptonight) Còn đây khi đào coin đt không hề cảm thấy nóng. Bạn cũng có thể tắt app, tắt mạng đi cũng có thể đào được chỉ cần sau mỗi 24h vào app và nhấn vào dấu Power ( dấu sấm sét ấy) là tiếp tục kiếm tiền thôi. Mình sẻ không nói nhiều về vấn đề này nữa.

Thuyết 8 giờ thứ ba' quyết định cuộc đời giàu - nghèo mỗi người

Mười năm sau khi tốt nghiệp đại học tôi tham dự một buổi họp lớp. Cuộc gặp mặt bạn cũ giúp tôi nhìn ra được một lý thuyết quan trọng quyết định cuộc đời mỗi người, tôi gọi là "thuyết 8 giờ thứ ba".  Nhớ lại những người bạn cùng lớp Vũ Tuệ và Tống Trần khi còn đi học, tôi rất ngạc nhiên trước những thay đổi đáng kể của họ.  Vũ Tuệ thời còn là sinh viên nổi bật với thành tích xuất sắc và ngoại hình nổi bật. Sau khi tốt nghiệp, cậu ấy vào làm việc tại một đơn vị được bố mẹ sắp xếp sẵn. Trong khi chúng tôi đang loay hoay tìm việc thì cậu ấy lại tận hưởng cuộc sống thoải mái. Tuy nhiên, số phận đã trêu đùa Vũ Tuệ vài năm trước, đơn vị tiến hành sa thải nhân sự, trong danh sách có tên cậu ấy. 

Các yêu cầu bạn cần có khi học ngành công nghệ thông tin

Công nghệ thông tin đang nổi lên là một ngành phát triển, có vai trò quan trọng trong sự phát triển của một xã hội hiện nay và có rất nhiều quyết tâm theo đuổi nó. Thế nhưng, đã có một ai thực sự tìm hiểu về khái niệm công nghệ thông tin là gì?

Danh sách các ứng dụng Android mã nguồn mở tuyệt vời để tăng cường kỹ năng lập trình cho bạn

Cách tốt nhất để học là đọc và đọc thật nhiều, điều này luôn đúng đối với developer chúng ta.Nếu bạn muốn kỹ năng lập trình của mình tốt hơn nữa thì bạn phải đọc thật nhiều code hơn nữa. Sách, theo dõi các blogger, các forums đều tốt ở một mức nhất định nhưng không có gì có thể thay thế một project mã nguồn mở với đầy đủ chức năng, toàn bộ source code của nó ở ngay trước mắt bạn.

Cách đưa code lên GitHub và tạo GitHub Pages

Xin các bạn tại hiepsiit.com, khi mình đọc những bài viết trên nhóm hiepsiitthì mình thấy có nhiều bạn vẫn không biết đưa code lên GitHub, hoặc bị lỗi, hoặc có thể là những bạn mới và đặc biệt là các bạn không biết tạo GitHub

Khắc phục lỗi Error: MySQL shutdown unexpected làm bạn không khởi động được MySQL trên XAMPP

Error: MySQL shutdown unexpectedly. This may be due to a blocked port, missing dependencies, improper privileges, a crash, or a shutdown by another method. Press the Logs button to view error logs and check the Windows Event Viewer for more clues. If you need more help, copy and post this entire log window on the forums.