Nun gibt es in der Vererbung bei der Spezialisierung Fälle,
in denen brauche ich gar keine Methode,
keine Operation in der Oberklasse, keine Methode in der Oberklasse,
weil man da nichts Allgemeines sagen kann.
Man weiß, ich sage nur, man braucht das,
aber man hat noch gar nicht gesagt, kann auch gar nicht genau sagen, wie.
Und das wäre eine Möglichkeit, wo wir abstrakte Methoden und abstrakte Klassen einsetzen.
In Attrakte nehmen wir das für unser Beispiel Konto,
nehmen wir mal an, es gibt nicht das allgemeine Konto,
sondern es gibt nur die speziellen Konto, Schiropondo, Sparbuch,
Tagesgeldkunde, was auch immer, für das allgemeine Konto,
da müsste ich, kann ich manche Sachen gar nicht sagen.
Zum Beispiel die Frage, ob ein Konto gedeckt ist,
ist sehr unterschiedlich, ob ich ein Girokonto habe mit Überziehungsmöglichkeiten und Sparbuch,
wo ich das nicht kann oder vielleicht noch einen lügen konnte,
wo ich das auch nicht kann.
Wenn ich das nicht angeben kann, dann kann ich das durchaus so machen,
dass ich hier eine abstrakte Methode verwende, abstrakte Methode,
ist eine Methode, bei der es keine Implementation gibt.
Das heißt, nur die Operation,
keine Methode dazu und das hat zur Folge,
dass ich natürlich von dieser Klasse auch keine Exemplare ableiten kann,
weil das Exemplar, weil wir dann hier keine ausführbaren,
gut, ist jetzt Aber die Unterklassen wirken das dann,
diese Implementationen liefern.
Sie widmen die also erstmalig definieren.
Wir brauchen nicht redefinieren, sonst brauchen Sie nur definieren.
Und dann würde hier ein Exemplar für ein Sparbuch,
würde hier ein Pot haben und ein Exemplar von Girokonto
oder so ein Jügenkonto oder für ein Tagesgeldkonto ebenfalls.
Diese abstrakten Klassen ist eine wesentliche, ein wesentliches Konzept von Java.
Wir sind dabei gleich bei der Antwort auf die Frage
Schauen wir hier die Frage sechs, abstrakte Klassen.
Wodurch sind Sie gekennzeichnet? Das steht also hier auf dieser Folie
. Zunächst hat eine abstrakte, ist eine abstrakte Klasse,
hat ein Schlüsselwort abstract und abstrakte Methoden darin.
Das sind die Methoden, wo es keine Implementierung gibt,
haben auch das Schlüsselwort abstract. Und von diesen Klassen können
keine Exemplare gebildet werden, sondern nur von den Unterklassen.
Am Ende wirkt das so, das zeigt das vorhergehende Bild,
die Oberklasse bringt die Verpflichtung mit sich für die Unterklasse,
als alle Unterklassen hier eine Implementation liefern müssen,
sie das nicht tun, können sie keine Exemplare erzeugen.
So eine Art, diese Verpflichtung kennen sie schon.
Und zwar, woher? Kurz überlegen? Sie kennen die von
der Implemente, von den Interfaces. Die Interfaces haben auch
diese abstrakten Methoden. Sie haben die von keiner Implementation,
aber die Verpflichtung für den Programmierer, der das implementiert,
hier in dem Fall für den Programmierer, der davon erbt, eine Klasse ableitet.
Und das soll eine konkrete Klasse sein, die Instanzen bildet.
In unserem Beispiel Ich konnte die Methode, die Operation ist Betrag gedeckt,
ist oben nicht implementiert. Es ist eine abstrakte, Klasse,
und abstrakte Klassen haben nicht nur das Schlüsselwort Apps trägt,
so wie wir es hier oben stehen haben,
sondern hier sehen Sie,
hier fehlt auch geschweifte Klammer auf, geschweifte Klammer zu,
fehlt dieser Teil, wo die Implementation eigentlich dazwischen steckt.
So, und damit kann ich das konkret noch keine,
kann ich keine Methode mit ableiten,
da kenne ich keine Exemplar davon ab.
Ja, und das mache ich dann,
wenn das nur in Schwarmbuch und Girokolo sinnvoll implementierbar ist,
das allgemeine Konto kann sowas nicht sagen
Sie das im Überblick aus, die abstrakten Methoden, definiere ich so,
dass ich hier also mit dem schlüsselret App-Streck arbeite und dann kann ich den Body weglassen und in der Unterklasse,
die ihr davon erbt, das erkennen wir hier in Schlüsselwort Extense,
in dem Fall sehe ich ja im Quelltext nicht,
habe ich tatsächlich hier ein Body, also die Implementation,
frisch und geschleifte Klammer auf und schwisch bescheuerte Klammer zu,
steht dort die Bedingung zum Beispiel,
wann eine Abhebung möglich ist, nämlich hier nur,
wenn der Saldo größer oder gleich ist,
den Betrag,
den ich abheben werde
So, das schauen wir uns später nochmal in die Tipps an.
Noch weitere Exemplare, Eigenschaften viel abstrakter Klassen. Wir können ihr Operationen deklarieren,
ohne dass wir die Methode, die App-Implementation dazu liefern.
Also nur die Schnittstelle. Und deswegen finden die keine Exemplare
. Erläutert werden das nochmal im Zusammenhang.
Wenn wir das eine als abstrakte Bildklassen bezeichnen,
dürfen wir das andere durchaus als konkrete Klassen bezeichnen
Allerdings eine kleine Ergänzung. Ich kann auch eine Klasse abstrakt,
als abstraktiv deklarieren, wenn sie keine abstrakten Methoden enthält.
Umgekehrt ist das nicht der Fall. Dann noch weitere Ergänzung zum E-Mail-Klassendiagramm
. Dort macht man die konkreten Klassen mit normaler Schrift,
in den Schrift- und Klassenlernen und abstrakte Klassen mit einem, mit kursiver Schrift.
Trotzdem ist es so, dass wir abstrakte Klassen aufrufen können,
also zum Beispiel, wenn ich mit der Klasse Konto arbeite,
darf ich durchaus die Operation ist Betrag gedeckt.
Aufrufen, also die Methode aufrufen,
auch wenn sie in dieser Form keine Implementierung hat,
arbeitet, denn es gibt kein Problem.
Tatsächlich arbeiten kann ich ja nur mit Operationen,
mit Exemplaren, die von konkreten Klassen abgeleitet sind.
Und damit haben sie immer, gibt es diese Operation immer.
Von abstrakten Klassen gibt es ja keine Exemplare,
also zur Laufzeit, auch nichts,
was ich
da aufrufen würde
Zum Verständnis, zum Vermerken, Leute,
möchte ich hier noch mal zwei Begriffe darstellen.
Dieses Erben heißt, den Quertext kopieren und neu übersetzen.
Das ist durchaus eine gute Merkhilfe, damit sie sich das besser einprägen können.
Ja, also der Compiler würde sozusagen den Quertext nehmen,
noch mal übersetzen und damit werden diese Fragen,
die wir vorhin hatten, auch ein bisschen leichter zu verstehen.
Wie war denn das mit der überschriebenen,
überschriebenen Klasse und dem Aufruf des Originals
Gleichzeitig möchtest du darauf hinweisen, dass dieses,
mit die Methodenaufrufe zu suchen,
erstmal immer nach oben und nach unten passiert, das kann man,
ähnlich wie dieses Spielzeug nach oben und nach unten,
bei Jojo-Effekt bezeichnen.
Das gibt es also, wie Sie,
wie Sie hier sehen, nicht nur bei den Diäten.
Und zwar, wenn ich mich selbst,
wenn ich einen Selbstaufruf habe, dann geht, wirkt das dynamische Binden.
Ich suche immer in der Klasse des aktuellen Objekts.
Und danach gehe ich hoch in die Oberklasse.
So ist das in der wahr organisiert
Gleichzeitig möchte ich noch, oder das zeigen wir hier kurz am Bild,
ja, zur Laufzeit, weil es wird zur Laufzeit binden,
eben das an das wirkliche Exemplar gemacht haben,
was wir aufrufen, zum Beispiel haben wir ein Exemplar,
ja, Unterklasse dann und wir rufen dann etwas auf,
was hier definiert sein sollte, aber es existiert hier nicht,
sondern es ist in der Oberklasse definiert,
dann suchen wir als nächstes zunächst,
also da und dann weiter wieder hier unten und dann geht es wieder hoch.
Deswegen diesen Jojo-Aufruf, ja, also die Oberklasse,
definiert etwas, die Unterklasse,
redefiniert es etwas und dieses Redefinierte ist dann hier unten aber zur Laufzeit,
wird wieder hier in der Klasse des aktuellen Objekts,
wenn es das Objekt der Unterklasse ist,
begonnen mit der Suche nach den Operationen.
Wir schauen nochmal zu den Fragen,
wir haben bis jetzt beantwortet die Frage, mit Folge 3,
mit dem Superkonstruktur,
die Frage,
was ein Konstruktur ist
Sollten sie natürlich noch wissen, nur so viel dazu.
Das ist diese Operation, die ein neues Objekt erzeugt in
diesem Objekt, initiale Werte zuweist. So,
dann hat mir jetzt die abstrakte Klasse, wodurch sie gekennzeichnet ist.
Und zum Schluss hatten wir diese Frage mit,
wie läuft denn das ab in der jübüarchie,
einem auszuführenden Methode zu suchen, das war das mit dem Jujo-Effekt.
Und weiter geht's mit dem Chapeau in der Choponen-Methode im nächsten Abschnitt