Weil man in Java nunmal versucht gegen Interfaces zu implementieren.
Nehmen wir mal an du hättest 4 verschiedene Auto-Klassen:
BMW, Audi, VW, Mercedes.
Jede hat eine fahren() - Methode.
Jetzt fahr mal mit jedem Auto in deinem Programm.
Um dir alle Autos zu merken die Fahren können brauchst du eine Liste oder etwas ähnliches, in dem Fall aber entweder 1 extra-liste pro auto-klasse, oder eine Liste aus Object auf der aufrufe dann so aussehen:
für jedes object aus der liste:
bist du ein bmw: dann nach bwm casten und fahren aufrufen
bist du ein audi: dann nach audi casten und fahren aufrufen
...
hättest du dagegen ein Interface FahrbaresObjekt mit einer fahren()-Methode könntest du einfach eine Liste von FahrbaresObjekt erstellen, alle deine Autos da einfügen (da sie das Interface implementieren sind sie zu der Liste zuweisungskompatibel) und wenn du dann mit jedem Auto fahren willst sagst du nur noch:
für jedes FahrbaresObjekt aus der Liste : fahren()
Damit wird die richtige fahren()-Methode aufgerufen die dein konkretes Auto hat, aber der Code wird wesentlich lesbarer und einfacher zu pflegen.
Gruß