|
An abstract class may contain complete or incomplete methods. Interfaces can contain only the signature of a method but no body. Thus an abstract class can implement methods but an interface can not implement methods. · An abstract class can contain fields, constructors, or destructors and implement properties. An interface can not contain fields, constructors, or destructors and it has only the property's signature but no implementation. · An abstract class cannot support multiple inheritance, but an interface can support multiple inheritance. Thus a class may inherit several interfaces but only one abstract class. · A class implementing an interface has to implement all the methods of the interface, but the same is not required in the case of an abstract Class. · Various access modifiers such as abstract, protected, internal, public, virtual, etc. are useful in abstract Classes but not in interfaces. · Abstract classes are faster than interfaces. interface just declaration.it provide standared for programming.it has no code.on the other hand abstaract class is one which can not make object.it is always inherited such that ie public abstarct class clscon { protected sqlconnection con= new sqlconnection() public clscon() { con.connectionstring= configurationmanager.connectionstring("cn").connectionstring; } }//this is abstract class interface public interface intemp { get; set; } There are basically three things to understand about interfaces and abstract classes: 1. Interfaces declare the methods a class must implement, but don't contain code. 2. Abstract classes may contain a mix of abstract and implemented methods. The abstract methods must be overridden in descendant classes.
An interface cannot provide any code; just the signature means all methods must be abstract. But an abstract class can provide complete, default code and/or just the details but at least at least one method must be abstract. A class may inherit several interfaces. But a class may inherit only one abstract class. If the various implementations only share method signatures then it is better to use Interface. If the various implementations are of the same kind and use common behavior or status then abstract class is better to use. 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. But 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.
Differences between Interfaces and Abstract classes Which we use ? I. multiple inheritance A class may implement several interfaces but can only extend one abstract class. II. default implementation An interface cannot provide any code at all, much less default code. An abstract class can provide complete code, default code, and/or just stubs that have to be overridden. III. adding functionality If you add a new method to an interface, you must track down all implementations of that interface in the universe and provide them with a concrete implementation of that method. If you add a new method to an abstract class, you have the option of providing a default implementation of it. Then all existing code will continue to work without change. IV. is-a vs -able or can-do Interfaces are often used to describe the abilities of a class, not its central identity, e.g. an Automobile class might implement the Recyclable interface, which could apply to many otherwise totally unrelated objects. An abstract class defines the core identity of its descendants. when u want to go for inheritance in so many derived classes but the methods implementations are different for different derived classes then u will make the class as abstract or interface. When all the method's implementations are based on derived class u will go for interface and if few implementations are common and remaining depends on derived class u will go for abstract class where u can have defined as well as declared methods also. Note: abstract and interface classes are used when their methods are mandatory for derived classes and are not optional. They put restriction on derived classes that they cannot skip those methods withoud having them in it. The main differences are 1. Abstarct class can have concreat methods where as interface have no methods implementing. 2. Abstract class come with inheriting chain and interfaces doesnot support inheritence
abstract class can implement methods but interface can not. abstract class is used generally when we want to express inheritance between classes (for example Rectangle, Circle and Triangle classes can be derived all from GeometricForm class which is abstract and can not be instanciated). Interface does not express inheritance but express behavior; if I want to pass objects between a client application and a server application my classes must implement ISerializable interface (so it is a behavior). A class can implement many interfaces but it can inherit from only one class. There are lost of discussion on the internet about the Interface vs Abstract class. Also, as base class whether we have to use interface, abstract class or normal class. I am trying to point out few considerations on which we can take decision about Interface vs Abstract class vs Class. Abstract Class vs Interface I am assuming you are having all the basic knowledge of abstract and interface keyword. I am just briefing the basics. We can not make instance of Abstract Class as well as Interface. Here are few differences in Abstract class and Interface as per the definition. Abstract class can contain abstract methods, abstract property as well as other members (just like normal class). Interface can only contain abstract methods, properties but we don’t need to put abstract and public keyword. All the methods and properties defined in Interface are by default public and abstract. //Abstarct Class
public abstract class Vehicles { private int noOfWheel; private string color; public abstract string Engine { get; set; } public abstract void Accelerator(); } //Interface public interface Vehicles { string Engine { get; set; } void Accelerator(); } We can see abstract class contains private members also we can put some methods with implementation also. But in case of interface only methods and properties allowed. We use abstract class and Interface for the base class in our application. This is all about the language definition.
|