So sánh Abstract và Interface

Cũng đã có khá nhiều bài viết về vấn đề này nhưng vẫn có khá nhiều bạn thắc mắc với tôi và hình như các bạn đó còn khá mơ hồ về 2 khái niệm này. Hôm nay tôi cũng bon chen viết một bài nhằm giúp các bạn phân biệt được Abstract class và Interface, trong bài viết tôi cũng nếu ra những nhận định mang tính cá nhân đúc rút từ kinh nghiệm chinh chiến của mình mong mọi người cùng góp ý.

Abstract class (Lớp trừu tượng) có thể hiểu là  một class cha cho tất cả các Class có cùng bản chất. Do đó mỗi lớp con chỉ có thể kế thừa từ một lớp trừu tượng. Abstract class không cho phép tạo các thể hiện ( instance), vì vậy bạn không thể khởi tạo một đối tượng trực tiếp từ một Abstract class.

Interface có thể được xem như một mặt nạ cho tất cả các Class cùng cách thức hoạt động nhưng có thể khác nhau về bản chất. Từ đó lớp con có thể kế thừa từ nhiều Interface để bổ sung đầy đủ cách thức hoạt động của mình (đa kế thừa - Multiple inheritance).


ABSTRACT
INTERFACE
Abstract Class là "khuôn mẫu" cho Class Interface chứa các "khuôn mẫu" cho Method
Abstract class có thể chứa thêm các Method đã được triển khai hoặc các biến hằng có giá trị vì vậy có thể run một Abstract nếu nó có phương thức Main. Interface không thể chứa các Method đã được triển khai, nó chỉ chứa các biến không có giá trị => Không thể run một interface.
Phương thưc của abstract class có thể sử dụng những access modifiers như private, protected, default, public, static Phương thức của interface không cần khai báo access modifiers vì chúng chỉ sử dụng public, asbtract và đã được mặc định.
Lớp con phải định nghĩa lại (Override)các phương thức trừu tượng (Có khai báo với từ khóa Abstract ), các phương thức thường không cần phải định nghĩa lại. Các lớp con của Interface sẽ phải định nghĩa lại toàn bộ các phương thức có trong Interface, (Mặc định các phương thức trong Interface đều là phương thức trưu tượng - Abstract method)
Một lớp con của lớp trừu tượng chỉ được thừa kế 1 lớp cha là lớp trừu tượng (Dùng từ khóa extends để kế thừa). Một lớp con có thể thừa kế nhiều Interface cùng một lúc (Dùng từ khóa implement)
Abstract class có thể kế thừa abstract class khác và implement nhiều interface Interface chỉ có thể kế thừa nhiều interface.

2 nhận xét:

Rất mong các ý kiến của các bạn khi đọc bài viết này !