Click here to Skip to main content
15,847,750 members
Please Sign up or sign in to vote.
3.90/5 (8 votes)
See more:

What are some real world examples of how to use abstract classes and interfaces?

Updated 19-Nov-09 1:50am

Real world examples? the .net framework is full of them
TextWriter comes to mind and Stream class
where as IEquatable<t></t> is good example for interface.

The way I see it:
Interface - Add behavior to a class, a contract to perform certain operations on a object
Abstract class - Define a base class for several types, like the stream class - I know I will read the data from a stream (which is an object, not a behavior of a certain object) but I don't realy care where the strema comes from.
Share this answer

An abstract class is a class that you cannot create an instance of. It can provide basic functionality, but in order for that functionality to be used, one or more other classes must derive from the abstract class. One of the major benefits of abstract classes is that you can reuse code without having to retype it. That has a plethora of benefits, such as reducing bugs and making coding faster. A concrete example of an abstract class would be a class called Animal. You see many animals in real life, but there are only kinds of animals. That is, you never look at something purple and furry and say "that is an animal and there is no more specific way of defining it". Instead, you see a dog or a cat or a pig... all animals. The point is, that you can never see an animal walking around that isn't more specifically something else (duck, pig, etc.). The Animal is the abstract class and Duck/Pig/Cat are all classes that derive from that base class. Animals might provide a function called "Age" that adds 1 year of life to the animals. It might also provide an abstract method called "IsDead" that, when called, will tell you if the animal has died. Since IsDead is abstract, each animal must implement it. So, a Cat might decide it is dead after it reaches 14 years of age, but a Duck might decide it dies after 5 years of age. The abstract class Animal provides the Age function to all classes that derive from it, but each of those classes has to implement IsDead on their own.

Now, an interface is like an abstract class, except it does not contain any logic. Rather, it specifies an interface. So, there might be an interface called IFly. This might have the methods GoForward and GoDown. Those methods would not actually contain any logic... each class that implements interface IFly would have to implement those GoForward and GoDown methods. You could have classes Duck and Finch implement interface IFly. Then, if you want to keep a list of instances that can fly, you just create a list that contains items of type IFly. That way, you can add Ducks and Finches and any other instance of a class the implements IFly to the list.

So, abstract classes can be used to consolidate and share functionality, while interfaces can be used to specify what the common functionality that will be shared between different instances will be, without actually building that functionality for them. Both can help you make your code smaller, just in different ways. There are other differences between interfaces and abstract classes, but those depend on the programming language, so I won't go into those other differences here.

Share this answer
BrianBissell 4-Aug-11 9:27am    
Great explanation

Just a little sad with the IsDead() method example lol
[no name] 3-Aug-14 10:32am    
My Vote Of 5
Ayesha_K 20-Sep-15 15:44pm    
can I get the code for this scenario ??

Do you mean real-world as in "A live software system which includes  Abstract classes or interfaces" or do you mean "A contrived example which demonstrates their usefullness"?

If you mean the latter think of Vehicle as an abstract class. You can't yet do anything with it because you have no idea what it does, or how to drive it.

abstract class Vehicle{}

Vehicles could be split into morotized and pedal-powered, but still this is abstract, we still dont know what to do with it.

abstract class MotorVehicle : Vehicle {} 

abstract class PedaledVehicle : Vehicle {}

You could now define a concrete (non-abstract) class, like car.

class MotorCar : MotorVehicle {}

 Intefaces come in handy you can only inherit from one base class. So imagine some vehicles are drivable, others are remote controlled, some vehicles use a stearing wheel, others dont

interface IDrivable{}

interface IHasStearingWheel{}

Now you could derive a DrivableMotorCar from its base clas, and also implement other behaviours.

class DrivableMotorCar : MotorVehicle, IDrivable, IHasStearingWheel {}

Share this answer
yogeshCJ 1-Jun-10 0:38am    
Excellent explanation !! thx
Prosanta Kundu online 9-Jul-10 0:25am    
Reason for my vote of 5
Really good.
sameer.gogia 12-Nov-12 11:11am    
I just signed in to Rate your answer *****
Thanks a lot :)
Member 10050153 17-Jun-13 10:19am    
Interface and Abstract class

Write a program to maintain University marking Database.
Student is Abstract class, it has Roll no., Name, subject_1_mark attributes.
Show_student_data() is abstract method.
Get_student_data() is non abstract method.
ISport is an Interface, having attribute sport_grace_marks=5.
Show_sport_mark() is a method.
IExService_Man is an Interface, having attribute ExService_Man_grace_marks=10.
Show_ExService_Man_mark() is a method.
Result is Class, it is inherited from Student, ISport, IExService_Man.
Total_marks=subject_1_mark + sport_grace_marks + ExService_Man_grace_marks.
Show_result() is method of Result class.
Share this answer
mir hassan 4-May-13 14:13pm    
its very nice Article
Share this answer
vicky_geek 17-Sep-10 16:14pm    
Reason for my vote of 5
Automatic vote of 5 for accepting answer.
Jayanti123 23-Dec-11 2:57am    
There is no real example in this.
I Just find a suitable reference... Pls refer to this...
Share this answer
yogeshCJ 1-Jun-10 0:39am    
nice link!!

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900