Was ist Vererbung?
Da diese FAQ-Antwort im Rahmen eines Java -Kurses geschrieben wurde, verwendet sie Java zur Erklärung.
Übernahme
Bei der Vererbung übernimmt eine Klasse die nicht-statischen Felder und nicht-statischen Methoden einer anderen Klasse.
Im folgenden Beispiel übernimmt („erbt“) die Klasse »Extension« die Methoden der Klasse »java.lang.Object«, darunter die Methode »toString()«.
Main.java
final class Extension extends java.lang.Object { }
public final class Main
{ public static void main( final java.lang.String[] args )
{java.lang.System.out.println
( new Extension().toString() );}}
- Protokoll
Extension@4c63ef20
Hinzufügen
Eine erbende Klasse kann Methoden zu den übernommenen Methoden hinzufügen.
Main.java
final class Extension extends java.lang.Object
{void print()
{ java.lang.System.out.println
( toString() ); }}public final class Main
{ public static void main( final java.lang.String[] args )
{new Extension().print();
}}
- Protokoll
Extension@4c63ef20
Ersetzen
Eine erbende Klasse kann übernommene Methoden ersetzen.
Main.java
final class Extension extends java.lang.Object
{@java.lang.Override public java.lang.String toString()
{ return "Extension"; }}public final class Main
{ public static void main( final java.lang.String[] args )
{java.lang.System.out.println
( new Extension().toString() );}}
- Protokoll
Extension
Indikationen
Vererbung wird eingesetzt, wenn die erbende Klasse einen Begriff darstellt, der ein Unterbegriff des von der vererbenden Klasse Dargestellten ist.
Beispielsweise könnte eine Klasse, die Laserdrucker darstellt, von einer Klasse erben, die Drucker darstellt.
Kritik
Vererbung führt oft zu Problemen, da sie die Abgrenzung von Klassen untereinander verletzt. Insbesondere Hierarchien vieler durch Vererbung verbundener Klassen führen zu Problemen.
www.javaworld.com/article/2073649/why-extends-is-evil.html
en.wikipedia.org/wiki/Fragile_base_class_problem
Als Alternative wird Komposition (Einbau von Objekten einer „Oberklasse“ als Felder, die dann bei der Implementation verwendet werden können) empfohlen.
“favor object composition over class inheritance ” – Design Patterns: Elements of Reusable Object-Oriented Software