Java abstrakte Klassen und Methoden: Ein umfassender Leitfaden
Java abstrakte Klassen und Methoden
Dieses Tutorial bietet eine klare, beispielgetriebene Erkundung von Java abstrakten Klassen und Methoden und erklärt, wie Abstraktion in Java implementiert wird.
Java abstrakte Klasse
In Java kann eine abstrakte Klasse nicht instanziiert werden. Das abstract-Schlüsselwort markiert die Klasse als abstrakt. Zum Beispiel:
// abstrakte Klasse erstellen abstract class Sprache { // Felder und Methoden } ... // Versuch, ein Objekt zu erstellen Sprache // wirft Fehler Sprache obj = new Sprache();
Eine abstrakte Klasse kann sowohl konkrete (reguläre) Methoden als auch abstrakte Methoden enthalten. Zum Beispiel:
abstract class Sprache { // abstrakte Methode abstract void methode1(); // reguläre Methode void methode2() { System.out.println("Dies ist eine reguläre Methode"); } }
Mehr zu regulären Methoden unter Java Methoden.
Java abstrakte Methode
Eine abstrakte Methode hat keinen Körper; sie deklariert einen Vertrag, den Unterklassen erfüllen müssen. Sie wird mit dem abstract-Schlüsselwort definiert, z. B.:
abstract void anzeigen();
Da ihr ein Körper fehlt, endet die Anweisung mit einem Semikolon. Wenn eine Klasse eine abstrakte Methode deklariert, muss die Klasse selbst als abstrakt deklariert werden, andernfalls wirft der Compiler einen Fehler:
// Fehler // Klasse sollte abstrakt sein class Sprache { // abstrakte Methode abstract void methode1(); }
Beispiel: Java abstrakte Klasse und Methode
Obwohl abstrakte Klassen nicht direkt instanziiert werden können, können konkrete Unterklassen sie erweitern und ihre Member nutzen. Zum Beispiel:
abstract class Sprache { public void anzeigen() { System.out.println("Dies ist Java Programmierung"); } } class Haupt extends Sprache { public static void main(String[] args) { Haupt obj = new Haupt(); obj.anzeigen(); } }
Ausgabe:
Dies ist Java Programmierung
Hier definiert die abstrakte Klasse Sprache eine konkrete Methode anzeigen(). Die Unterklasse Haupt erbt diese Methode und ruft sie über ihre Instanz auf.
Abstrakte Methoden implementieren
Wenn eine abstrakte Klasse eine abstrakte Methode deklariert, muss jede konkrete Unterklasse eine Implementierung bereitstellen. Zum Beispiel:
abstract class Tier { abstract void tonMachen(); public void essen() { System.out.println("Ich kann essen."); } } class Hund extends Tier { public void tonMachen() { System.out.println("Wuff wuff"); } } class Haupt { public static void main(String[] args) { Hund h1 = new Hund(); h1.tonMachen(); h1.essen(); } }
Ausgabe:
Wuff wuff Ich kann essen.
Die Unterklasse Hund implementiert die abstrakte tonMachen()-Methode, während sie die konkrete essen()-Methode erbt.
Hinweis: Wenn Hund tonMachen() nicht überschreibt, muss es selbst als abstrakt deklariert werden.
Konstruktor abstrakter Klassen aufrufen
Abstrakte Klassen können Konstruktoren definieren wie normale Klassen. Unterklassen rufen den Oberklassen-Konstruktor mit super() auf. Zum Beispiel:
abstract class Tier { Tier() { // Initialisierungslogik } } class Hund extends Tier { Hund() { super(); // zusätzliche Initialisierung } }
Denken Sie daran, dass super() die erste Anweisung im Unterklassen-Konstruktor sein muss.
Java Abstraktion
Abstrakte Klassen und Methoden sind die primären Werkzeuge, um Abstraktion in Java zu erreichen. Abstraktion verbirgt unnötige Implementierungsdetails und präsentiert nur die wesentliche Schnittstelle dem Benutzer. Dies vereinfacht komplexe Systeme und fördert Flexibilität.
Zum Beispiel erfüllt eine Motorradbremse dieselbe Hochlevel-Funktion – das Motorrad zu verlangsamen – während ihr interner Mechanismus über Modelle hinweg variieren kann.
Beispiel 3: Java Abstraktion
abstract class Motorrad { abstract void bremsen(); } class SportMotorrad extends Motorrad { public void bremsen() { System.out.println("SportMotorrad Bremse"); } } class GelandeMotorrad extends Motorrad { public void bremsen() { System.out.println("GelandeMotorrad Bremse"); } } class Haupt { public static void main(String[] args) { GelandeMotorrad m1 = new GelandeMotorrad(); m1.bremsen(); SportMotorrad s1 = new SportMotorrad(); s1.bremsen(); } }
Ausgabe:
GelandeMotorrad Bremse SportMotorrad Bremse
Jede konkrete Unterklasse liefert ihre eigene bremsen()-Implementierung, was veranschaulicht, wie Abstraktion Schnittstelle von Implementierung entkoppelt.
Hinweis: Schnittstellen können ebenfalls verwendet werden, um Abstraktion in Java zu erreichen.
Wichtige Punkte zum Merken
- Verwenden Sie das
abstract-Schlüsselwort, um abstrakte Klassen und Methoden zu deklarieren. - Eine abstrakte Methode hat keinen Körper; sie endet mit einem Semikolon.
- Klassen, die abstrakte Methoden enthalten, müssen selbst abstrakt sein.
- Abstrakte Klassen können nicht direkt instanziiert werden.
- Konkrete Unterklassen erben abstrakte Klassen und implementieren abstrakte Methoden.
- Unterklassen müssen alle abstrakten Methoden überschreiben, es sei denn, sie sind selbst abstrakt deklariert.
- Statische Member einer abstrakten Klasse können über den Klassennamen aufgerufen werden:
Tier.statischeMethode();
Java
- C# Abstrakte Klassen & Methoden meistern: Praktischer Leitfaden
- Java Variablen und Literale: Umfassender Leitfaden
- Java Klassen und Objekte: Praktischer Leitfaden
- Javas final-Schlüsselwort verstehen: Variablen, Methoden und Klassen
- Java instanceof-Operator: Ein umfassender Leitfaden
- Java verschachtelte und innere Klassen meistern: Typen, Beispiele und Best Practices
- Java statische verschachtelte Klassen verstehen: Nutzung, Unterschiede und Beispiele
- Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
- Java Singleton-Pattern erklärt: Sichere Implementierung und Verwendung
- Java ObjectOutputStream meistern: Serialisierung, Methoden und praktische Beispiele