Yeah, the intersection of the terms is fairly, well, indefinite. Like the word "window". In computers "window" can mean a good ten or fifteen different
specific things that I know of. (I'm not actually counting...)
A B S T R A C T
An
abstract thing is something that doesn't have any concrete value or application.
http://dictionary.reference.com/browse/abstract (clauses 1, 2, and 3)
Yes, there are other dictionaries... but the Brits had the most straight-forward reading, methinks.
This is how the word
abstract is meant in the C++ literature: a
class (that is, a
type) that cannot be instantiated into specific objects (that is, it cannot be made into
actual data).
I N T E R F A C E
An
interface is itself an abstract concept, but for now let us put that beside us. In simplest terms, it is the commonality between two (or more) things.
In computers, that translates to: the specification of how two or more things communicate.
http://dictionary.reference.com/browse/interface
http://www.merriam-webster.com/dictionary/interface
http://en.wikipedia.org/wiki/Interface_(computer_science)
Again, the Brits have that nice usage note about the history of the word and its relationship to the computer sciences.
In software, an
interface is typically taken as a special type of object class that lists
members that other objects must have to conform to a specific way of communicating, or use. Some languages (like Java and Delphi) specify it as a special type of declaration that modifies a class definition. C++ doesn't. Part of the reason is that C++ allows for
multiple-inheritance, where Delphi and Java don't...
Same Difference
In practice, both things translate to much the same idea: a class declaration that cannot be instantiated unless specific methods, fields, etc. are provided with definition in a conforming (Java and Delphi) or
derived (C++) class.
That is, in C++, an interface is implemented simply as inheriting from one or more abstract classes that specify the required methods, etc.
Hope this helps.