Das gleiche ließe sich erreichen, indem man eine gemeinsame abstrakte Elternklasse definiert mit abstrakten Methoden. Diese müssen in den nachfahren implementiert werden. Der entscheidende Vorteil von Interfaces in diesem Fall ist jedoch: Eine Klasse kann nur von einer Basisklasse erben (Mehrfachvererbung gibt es nur in C++), Interfaces kann ich jedoch mehrere gleichzeitig implementieren. Damit kannst Du Interfaces für verschiedene Funktionalitäten der Klasse definieren und alle implementieren, während die verwendenden Elemente diese über die Interfaces verwenden.
Besonders extrem ist das in .NET realisiert, hier gibt es Interfaces für alle möglichen Dinge, z.B. IDisposable für eine Beeinflussung des Garbage Collectors beim Aufräumen von Klassen, IEnumerable für Listenklassen, ISerializable für serialisierbare (also z.B. in XML übersetzbare Klassen), IComparable für die Implementation für Vergleiche (notwendig für die Standard-Sortierungsfunktionen) usw. usf.
Und alle diese Interfaces sorgen für eine Implementation verschiedenster Verhaltensweisen, wie oben z.B. Unterstützung für Auflistungen, Speicherung, Vergleichen, Entsorgen. Diese Funktionalitäten werden dann über die Interfaces von den entsprechenden Implementationen angesprochen.
So, ich hoffe, ich konnte noch einen weiteren Anwendungsfall für Interfaces erklären

.
Achja, Three-Tier-Architekturen verwenden auch sehr stark Interfaces, um die Server- und Client-Implementationen sauber trennen zu können.