Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Sự khác biệt giữa Interface và Abstract Class trong Java và C#

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.