Häufige Fragen im Fachgespräch – Vererbung – Anwendungsentwickler-Podcast #8

Dieser Beitrag ist Teil 3 von 15 in der Serie Häufige Fragen im Fachgespräch.

In der achten Episode meines Anwendungsentwickler-Podcasts setze ich meine Reihe der häufigsten Prüfungsfragen im Fachgespräch fort. Das Thema ist dieses Mal die zweite „Säule“ der Objektorientierung, die Vererbung.

Probeabo bei Audible (Affiliate)

Beantwortung der Frage im Fachgespräch

  • Klassen können Attribute und Methoden von anderen Klassen übernehmen, indem sie von ihnen erben.
  • Die vererbende Klasse heißt Basisklasse (auch Eltern- oder Superklasse) und die erbende Klasse Subklasse (auch Kind- oder abgeleitete Klasse).
  • Um von einer Klasse zu erben, schreibt man in Java extends und den Namen des Basisklasse hinter die Klassendefinition. In C# wird anstatt extends einfach der Doppelpunkt : verwendet.
  • Alle Attribute und Methoden der Basisklasse können automatisch in der Subklasse verwendet werden, sofern sie für diese sichtbar sind. Der Sichtbarkeitsmodifizierer protected erlaubt der Klasse selbst und allen Subklassen den Zugriff auf die mit ihm ausgezeichneten Member.
  • Eine Klasse kann mit abstract als nicht instantiierbar gekennzeichnet werden. Dann können ihre Attribute und Methoden nur über Objekte ihrer Subklassen aufgerufen werden.
  • Auch eine Methode kann als abstract gekennzeichnet werden. Sie wird dann in der Basisklasse nicht implementiert und muss in den Subklassen implementiert werden. Sobald mind. eine Methode abstrakt ist, muss auch die gesamte Klasse abstrakt sein.
  • Methoden können in Subklassen überschrieben werden. Das bedeutet, dass in der Subklasse eine Methode mit derselben Signatur (Methodenname und Parameter) wie in der Basisklasse implementiert wird. Beim Aufruf der Methode an einem Objekt der Subklasse wird nun deren Implementierung verwendet anstatt der der Basisklasse.
  • Java erlaubt standardmäßig das Überschreiben von Methoden, während C# es standardmäßig verbietet. In Java kann man Methoden mit final als nicht überschreibbar kennzeichnen und in C# mit virtual als überschreibbar.
  • Auch Klassen können als nicht überschreibbar gekennzeichnet werden, was bedeutet, dass man von ihnen nicht erben kann. In Java wird hierfür final verwendet und in C# sealed.
  • Mit super kann innerhalb der Subklasse auf Member der Basisklasse zugegriffen werden.
  • In den meisten neueren Programmiersprachen ist es nur möglich, von einer einzigen Klasse zu erben, da die Mehrfachvererbung (die z.B. in C++ erlaubt ist) zu Problemen führen kann (z.B. dem Diamantenproblem).
  • In Java erben alle Klassen automatisch von Object.

Weiterführende Diskussion

  • Legt euch ein interessantes Beispiel (bitte nicht das alte Auto/Fahrzeug) für die Vererbung für die Prüfung zurecht.
  • Was ist die Methodensignatur? (Methodenname und Reihenfolge und Typ der Parameter)
  • Was ist der Unterschied zwischen dem Überladen und dem Überschreiben von Methoden? (Überschreiben: gleiche Signatur in Subklasse, Überladen: gleicher Name in derselben Klasse)
  • Was passiert, wenn ich eine private Methode „überschreibe“? (sie wird in der Subklasse „maskiert„)
  • Design Pattern „Template Method“ (verwendet final und abstract)

Tipps für die Entwicklerpraxis

Literaturempfehlungen

Links

Navigation der Serie<< Häufige Fragen im Fachgespräch – Kapselung – Anwendungsentwickler-Podcast #6Häufige Fragen im Fachgespräch – Polymorphie – Anwendungsentwickler-Podcast #10 >>
Polyglot Clean Code Developer
About the Author
Ausbildungsleiter für Fachinformatiker Anwendungsentwicklung und Systemintegration, IHK-Prüfer und Hochschuldozent für Programmierung und Software-Engineering.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax