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

IT-Berufe-Podcast - Ein Podcast von Stefan Macke - Montags

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. 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 * Viele Entwurfsmuster verwenden Vererbung. * Vererbung nicht im Sinne der „ist-ein“-Beziehung verstehen,