บทความนี้เปรียบเทียบ Abstract Class และ Interface ใน Java และ C#
Abstract Class
- มีทั้ง Declaration และ Definition (Implementation)
- ไม่รองรับ Multiple Inheritance โดยตรง
- มี Constructor
- อาจมี Static Members
- รองรับ Access Modifiers หลายแบบ (public, private, protected)
- Performance ดี (รวดเร็ว)
- ใช้ Implement Core Identity/Functionality ของ Class
- Class ใช้ Abstract Class ได้เพียง 1 ตัว
- เหมาะเมื่อหลาย Implementation เหมือนกันและมี Common Behavior
- ประกอบด้วย Methods, Fields, Constants
- อาจ Fully Implemented, Partially Implemented, หรือ Not Implemented
Interface
- มี Declaration เท่านั้น (ไม่มี Implementation - จนกว่าจะมี Default Methods ใน Java 8+ / C# 8+)
- บรรลุ Multiple Inheritance ได้
- ไม่มี Constructor
- ไม่มี Static Fields (แต่มี Static Methods ในรุ่นใหม่)
- Member ทั้งหมดเป็น Public โดยปริยาย
- Performance ไม่ดีนัก (ช้ากว่า Abstract Class เล็กน้อย)
- ใช้ Implement Peripheral Abilities (ความสามารถรอง)
- Class ใช้ Interface ได้หลายตัว
- เหมาะเมื่อหลาย Implementation แชร์ Methods
- ประกอบด้วย Methods เท่านั้น (ก่อนรุ่นใหม่)
- ต้อง Fully Implemented (โดย Class ที่ Implement)