Abstrakte Klassen in Java
Markiere eine Elternklasse als abstract, wenn sie mindestens eine Methode ohne Koerper fuer Kinder zum Fuellen lassen muss. Schreibe abstract class Machine mit abstract void horn(); und einer normalen Methode park, die park druckt. Schreibe class Truck extends Machine und gib horn einen Koerper, der honk druckt. In Yard.java baue einen Truck, rufe t.horn() auf, dann t.park(). Kompiliere mit javac Yard.java und starte java Yard. Der Bildschirm soll honk, dann park zeigen. Eine zweite Demo fuegt Car hinzu, damit zwei Kinder horn unterschiedlich fuellen. Lass Polymorphism fuer die naechste Seite — diese Lektion ist die unfertige Elternmethode und das Kind, das sie fertigstellt.
Fuelle die abstract-Methode auf dem Kind
Die Enums-Seite listete feste Namen. Diese Seite laesst absichtlich eine Methode unfertig. Oeffne Yard.java. Halte den oeffentlichen Klassennamen Yard. Loesche uebrige enum Level-Demos, wenn sie die abstract-Geschichte begraben, uebrige Signal/implements-Dateien, Pfaddemos und Tastatur-Scanner. Das Programm darf nicht auf Tippen warten. Du brauchst keine Importzeile.
Deklariere den abstract-Elternteil oberhalb der anderen Typen:
abstract class Machine {
abstract void horn();
void park() {
System.out.println("park");
}
}
Die abstract-Methode endet mit einem Semikolon und hat keinen { }-Koerper. Die normale Methode park behaelt einen vollen Koerper, damit jedes Kind sie wiederverwenden kann.
Deklariere das Kind mit extends Machine. Fuelle horn:
void horn() {
System.out.println("honk");
}
Du musst jede abstract-Methode fuellen, die auf dem Elternteil steht. Auf dieser Seite ist das nur horn. Schreibe in main kein new Machine() — eine abstract-Klasse wird nicht allein als Objekt gebaut.
In Yard.main:
Truck t = new Truck();
t.horn();
t.park();
Der erste Aufruf laeuft den Koerper auf Truck. Der zweite Aufruf laeuft den gemeinsamen Koerper auf Machine.
abstract class Machine {
abstract void horn();
void park() {
System.out.println("park");
}
}
class Truck extends Machine {
void horn() {
System.out.println("honk");
}
}
public class Yard {
public static void main(String[] args) {
Truck t = new Truck();
t.horn();
t.park();
}
}
Aus dem Ordner, der Yard.java haelt, starte javac Yard.java. Wenn Klammern, geschweifte Klammern und Semikolons passen, schreibt javac keine eigene Zeile. Dann starte java Yard — nicht java Yard.java. Lass die .java-Endung vom Startbefehl weg. Halte eine oeffentliche Klasse in der Datei, damit der Name Yard trifft. Die Hilfstypen Machine und Truck bleiben in dieser Anfaengerform ohne public.
Der Bildschirm zeigt honk, dann park. Geh den Lauf einmal durch. Java startet bei Yard.main. new Truck() baut einen Truck, der das abstract-horn fertiggestellt hat. t.horn() druckt honk. t.park() druckt park aus dem Elternkoerper, der schon existierte. Die unfertige Methode lebte nur als Anforderung, bis das Kind den Koerper schrieb.
Wenn javac ablehnt, pruefe drei Dinge. Erstens muss die Elternklassenzeile abstract class Machine sagen. Zweitens muss die unfertige Methode abstract sagen und mit ; enden. Drittens muss Truck tatsaechlich horn mit einem Koerper schreiben. Wenn du noch MEDIUM aus einer Enum-Datei siehst, wechsle zur abstract-Lehrdatei und starte java Yard erneut. Wenn du new Machine() versuchst, lehnt javac ab — das ist auf dieser Seite erwartet.
Sag die Regel laut, waehrend du den Bildschirm siehst: abstract-Elternteil nennt die fehlende Methode, Kind fuellt sie, gemeinsame Methoden laufen weiter. Erfinde noch keine lange Polymorphism-Parade vieler Eltern-typisierter Variablen. Diese Geschichte wartet auf die naechste Lektion.
Zwei Kinder fuellen horn unterschiedlich
Ein zweites Programm behaelt dieselbe abstract-Machine. Truck druckt weiterhin honk. Ein neues Car druckt beep. main baut beide, ruft jedes horn auf, dann park auf dem Truck.
abstract class Machine {
abstract void horn();
void park() {
System.out.println("park");
}
}
class Truck extends Machine {
void horn() {
System.out.println("honk");
}
}
class Car extends Machine {
void horn() {
System.out.println("beep");
}
}
public class Yard {
public static void main(String[] args) {
Truck t = new Truck();
Car c = new Car();
t.horn();
c.horn();
t.park();
}
}
Kompiliere mit javac Yard.java, dann starte java Yard. Der Bildschirm zeigt honk, dann beep, dann park. Jedes Kind fuellte denselben abstract-Namen mit seinem eigenen Druck. Der gemeinsame park-Koerper kommt weiterhin von Machine. Du schreibst immer noch nie new Machine().
Lies den Elternteil noch einmal: eine abstract-Methode, eine normale Methode. Lies die Kinder: jedes schreibt horn, keines schreibt park auf dieser Seite neu. Diese Trennung ist der Lehrpunkt. Wenn du horn auf Car weglasst, waehrend Car extends Machine gilt, lehnt javac ab, weil jede abstract-Methode gefuellt werden muss.
Wenn uebrige Enum-Demos noch in der Naehe sitzen, behalte sie als Geschichte. Fuer diese Lektion starte die abstract-Lehrdatei, damit der Bildschirm Methodenfuellungen zeigt, nicht MEDIUM. Wenn javac ueber doppelte oeffentliche Klassen klagt, halte nur Yard oeffentlich.
Vergleich mit Enums und Interfaces
Auf der Enums-Seite listete Level feste Namen. Auf der Interfaces-Seite fuellte implements leere Interface-Methoden. Auf dieser Seite laesst abstract class plus extends eine Klassenmethode unfertig, bis ein Kind den Koerper schreibt. Du kompilierst weiterhin Yard.java und startest java Yard. Die neuen Tokens sind abstract class, abstract void horn(); und ein Kind, das den Koerper liefert und park wiederverwendet.
Wenn eine uebrige enum Level-Datei noch offen ist, siehst du Konstanten und vielleicht einen switch. Wechsle zur abstract-Datei, damit oben abstract class Machine steht und main einen Truck baut. Halte Polymorphism-Demos, die nur Eltern-typisierte Variablen umschichten, von dieser Seite fern. Halte Tastatureingabe von dieser Seite fern.
Was diese Seite fuer Polymorphism laesst
Diese Seite fertigt abstract-Methoden auf konkreten Kindern. Die naechste Seite zeigt Polymorphism, wo eine Eltern-typisierte Variable unterschiedliche Kindobjekte halten und den passenden Methodenkoerper aufrufen kann. Bleib hier bei abstract-Eltern und gefuellten Kindern. Verlange noch keine Liste von Machine-Variablen, die auf viele Kinder zeigen.
Wenn du spaeter Polymorphism-Demos schreibst, startest du oft noch von einem abstract- oder normalen Elternmethodennamen. Behandle diese Seite als die Unfertig-Methoden-Haelfte jener Nachbargeschichte. Beende beide Yard-Demos, bis honk dann park — und dann honk, beep, park — automatisch wirken, bevor du die Polymorphism-Lektion oeffnest.
Vor Polymorphism
Du kannst abstract class Machine deklarieren, horn auf Truck fuellen und honk dann park sehen. Du kannst Car mit eigenem horn hinzufuegen und honk, dann beep, dann park sehen. Kompiliere Yard.java und starte java Yard fuer jede behaltene Demo nacheinander. Das Kind fertigte die abstract-Methode. Die naechste Seite ist Polymorphism, wo Aufrufe ueber eine Eltern-typisierte Referenz den Kindkoerper waehlen.
Behalte die Ein-Truck-Demo fuer eine klare abstract-Fuellung plus gemeinsames park. Behalte die Zwei-Kinder-Demo fuer ein klares Fuellpaar. Halte Polymorphism-Parade-Dateien von dieser Seite fern. Diese drei Gewohnheiten sind der Checkpoint, bevor du weitergehst. Wenn honk vor park nach new Truck() erscheint, haben abstract-Klassen ihren Job fuer diese Lektion erledigt und du bist bereit fuer das naechste Thema ueber Polymorphism.
Ein letzter Durchgang durch den Ordner: ein oeffentliches Yard, ein abstract-Machine, konkrete Kinder die horn fuellen, kein new Machine(), kein Tastaturwarten. Starte javac Yard.java und java Yard noch einmal auf der Demo, die du offen haeltst. Wenn der Bildschirm noch die Fuellungen druckt, die du geschrieben hast, ist der abstract-Vertrag fest und der Kurs kann auf der naechsten Seite zu Polymorphism gehen.
🧠 Testen Sie Ihr Wissen
Testen Sie Ihr Wissen
Fordern Sie sich mit diesem interaktiven Quiz heraus und sehen Sie, wie gut Sie das Thema verstehen
📝 Anweisungen
- Lesen Sie jede Frage sorgfältig
- Wählen Sie die beste Antwort für jede Frage
- Sie können das Quiz so oft wiederholen, wie Sie möchten
- Ihr Fortschritt wird oben angezeigt