I can say I relate to that. When I first started learning about OO and C# I too didn't get Interfaces. That's ok. We just need to come accross something that will make you appreciate the conveniences of interfaces.
Let me try two approaches. And pardon me for the generalizations.
Try 1
Say you're a native English speaker. You go to another country where English is not the native language. You need help. You need someone who can help you.
Do you ask: "Hey, were you born in the United States?"
This is inheritance.
Or do you ask: "Hey, do you speak English"?
This is interface.
If you care about what it does, you can rely in interfaces.
If you care about what is is, you rely on inheritance.
It's ok to rely on inheritance. If you need someone who speaks English, likes tea and likes soccer, you're better served asking for a Brit. :)
Try 2
Ok, let's try another example.
You use different databases and you need to implement abstract classes to work with them. You'll pass your class to some class from the DB vendor.
public abstract class SuperDatabaseHelper
{
void Connect (string User, string Password)
}
public abstract class HiperDatabaseHelper
{
void Connect (string Password, string User)
}
Multiple inheritance, you say? Try that with the above case. You can't. The compiler won't know which Connect method you're trying to call.
interface ISuperDatabaseHelper
{
void Connect (string User, string Password)
}
interface IHiperDatabaseHelper
{
void Connect (string Password, string User)
}
Now, there's something we can work with - at least in C# - where we can implement interfaces explicitly.
public class MyDatabaseHelper : ISuperDatabaseHelper, IHiperDatabaseHelper
{
IHiperDataBaseHelper.Connect(string Password, string User)
{
//
}
ISuperDataBaseHelper.Connect(string User, string Password)
{
//
}
}
Conclusion
The examples are not the best, but I think it gets the point accross.
You'll only "get" interfaces when you feel the need of them. Until them you'll think they're not for you.