Mensch und Person. Ich würde beides eher als abstrakte Klasse betrachten.
Stellen wir vor du hast eine abstrakte Klasse Schiff. Neben bei gesagt, abstrakte Klassen können nicht instanziert werden.
Denn: Hast du schon mal einen Menschen gesehen? Ich nicht. Nur Frauen, Männer, Kinder und was es sonst noch mittlerweile alles gibt.
Anderes Beispiel: Ich hab noch nie ein Werkzeug gesehen. Nur Hämmer, Schraubenzieher ect.
Kommen wir zurück zum Schiff. Jedes Schiff beispielsweise:
- Geschwindigkeit
- Gewicht
- Ladefläche
- Namen
Es wäre umständlich, wenn du das in jede Schiffsklasse extra reinschreiben müsstest. Denke nicht in kleinen Maßstäben. Stell dir vor du hast hunderte, tausende Schiffe und müsstest das in jede Klasse schreiben. Eine abstrakte Klasse kannst du dir als gemeinsamen Nenner vorstellen, den alle Klassen gemeinsam haben.
Daher sagst du einfach zum Beispiel:
public class Segelschiff extends Schiff {
...
}
Dein Segelschiff erbt dann die Eigenschaften des Schiffes.
Dein Segelschiff kann aber natürlich auch seine eigenen Eigenschaften haben.
Hat es vielleicht ein Segel? Oder einen Motor? Diese Dinge haben eben nicht alle Schiffe und sind deshalb dann Klassenspezifisch seperat auszumodellieren.
Anhand von deinem Beispiel, würde man eher sagen:
- Mensch -> Frau
- Mensch->Mann
- Mensch->Kind
Alle Menschen haben 2 Augen, sind am leben, atmen, haben einen Namen, haben ein Alter ect. Und dann musst du dir halt noch überlegen, was für spezifische Eigenschaften Frauen, Männer und KInder haben.
Aber ich denke das Schiffbeispiel ist das bessere von beiden :)
Ich hoffe ich konnte dir das Prinzip von Vererbung näher bringen.