Bài viết so sánh Abstract Class và Interface trong Java và C#.
Abstract Class (Lớp trừu tượng)
- Chứa cả khai báo (declaration) và định nghĩa (definition/implementation).
- Không thể thực hiện đa kế thừa (multiple inheritance) bằng abstract class.
- Có constructor.
- Có thể chứa static member.
- Hỗ trợ nhiều access modifier: public, private, protected.
- Hiệu năng tốt, thực thi nhanh.
- Dùng để implement core identity/chức năng cốt lõi của class.
- Một class chỉ dùng được 1 abstract class.
- Nếu nhiều implementation giống nhau, có hành vi chung → nên dùng abstract class.
- Chứa methods, fields, constants.
- Có thể fully implemented, partially implemented, hoặc không implement.
Interface
- Chỉ chứa phần khai báo (declaration only).
- Đạt được đa kế thừa (multiple inheritance) qua interface.
- Không có constructor.
- Không chứa static member (trước C# 8/Java 8; hiện nay có thể có static method).
- Mọi member đều public (mặc định).
- Hiệu năng kém hơn abstract class.
- Chậm hơn do cần tìm method thực tế trong class implement.
- Dùng để implement peripheral abilities (khả năng ngoại vi) của class.
- Một class có thể implement nhiều interface.
- Nếu nhiều implementation chia sẻ method → dùng interface.
- Chỉ chứa methods (trước C# 8/Default methods Java 8).
- Phải được fully implemented (trừ default method).
Lưu ý: Từ C# 8.0, interface hỗ trợ default implementation, static members, private members. Java 8+ cũng có default/static methods. Bảng so sánh trên phản ánh quan điểm truyền thống.