Abstract class có constructor, fields, và có thể mix abstract/concrete methods.
- Interface (trước C# 8) là pure contract chỉ chứa abstract members.
- Một class chỉ kế thừa được một abstract class nhưng có thể implement nhiều interface.
- Dùng abstract class khi cần chia sẻ behavior chung; dùng interface khi định nghĩa contract cho nhiều type không liên quan nhau.
- Từ C# 8+, interface có thể có default method implementation, nhưng abstract class vẫn giữ lợi thế với constructor và fields.