I need some insight, not just knowing the facts.
The 3 areas of OOP are Inheritance, Polymorphism and Encapsulation.

Now, Polymorphism can be applied in 3 ways: By inheriting, by abstracting (abstract classes) and by interfacing (interface class)

What I need to *understand* what is really the difference between abstract and interface classes. What make you use the one above the other?

I'm preparing a short 3-5 minutes "speech" on the question "Define OOP", but don't want to read my answer like a moron. I like to know exactly what i am talking about.