Vererbung kann man auch mit einer "ist ein"-Beziehung vergleichen.
Stell dir vor, du hast eine Basisklasse "Arbeiter", welche die Funktionen arbeitet(), hatFeierabend(), gehalt() und streikt() bereitstellt.
Von dieser Klasse leitest du verschiedene Arbeiter ab: Kfz-Mechaniker, Maler, Maurer... und so weiter.
Für diese Unterklassen gilt: ein Kfz-Mechaniker ist ein Arbeiter....
Das hat verschiedene Vorteile. Durch eine saubere Klassenhierarchie kannst du dir eine Menge Arbeit sparen und Fehleranfälligkeiten vermeiden.
Stell dir vor, die Funktion hatFeierabend() muss angepasst werden. Wenn du das in der Basisklasse "Arbeiter" machst, dann wirkt sich das auf alle Unterklassen aus! Du musst es nur einmal schreiben. Daher macht es Sinn, gemeinsame Funktionalitäten auch in einer gemeinsamen Basisklasse abzulegen.
Ebenso ist Vererbung auch eine Voraussetzung für Polymorphie. Ein Kfz-Mechaniker arbeitet anders als ein Maurer. Diese Funktion hast du jeweils entsprechend in den Unterklassen überschrieben. Du kannst aber z.B. eine Sammlung (egal jetzt ob Array oder Map oder sonstwas) der Basisklasse "Arbeitet" anlegen. Wenn du in dieser Sammlung den Arbeiter arbeiten() lässt, dann weiß Java, zu welcher konkreten Unterklasse der jeweilige Arbeiter gehört und wird die jeweilige (überschriebene) Methode verwenden!!!