Bảng so sánh Interface và Abstract Class
Nguồn bài viết: http://sinhvienit.net/@forum/showthread.php?t=24456
[ TABLE="head"]
Feature|
Interface|
Abstract class
Multiple inheritance|A class may inherit several interfaces.|A class may inherit only one abstract class.
Default implementation|An interface cannot provide any code, just the signature.|An abstract class can provide complete, default code and/or just the details that have to be overridden.
Access Modfiers|An interface cannot have access modifiers for the subs, functions, properties etc everything is assumed as public|An abstract class can contain access modifiers for the subs, functions, properties
Core VS Peripheral|Interfaces are used to define the peripheral abilities of a class. In other words both Human and Vehicle can inherit from a IMovable interface.|An abstract class defines the core identity of a class and there it is used for objects of the same type.
Homogeneity|If various implementations only share method signatures then it is better to use Interfaces.|If various implementations are of the same kind and use common behaviour or status then abstract class is better to use.
Speed|Requires more time to find the actual method in the corresponding classes.|Fast
Adding functionality (Versioning)|If we add a new method to an Interface then we have to track down all the implementations of the interface and define implementation for the new method.|If we add a new method to an abstract class then we have the option of providing default implementation and therefore all the existing code might work properly.
Fields and Constants|No fields can be defined in interfaces|An abstract class can have fields and constrants defined
[/TABLE]