Abstrakte Java-Klasse und abstrakte Methoden
Abstrakte Java-Klasse und abstrakte Methoden
In diesem Tutorial lernen wir abstrakte Java-Klassen und -Methoden anhand von Beispielen kennen. Wir werden auch etwas über Abstraktion in Java lernen.
Abstrakte Java-Klasse
Die abstrakte Klasse in Java kann nicht instanziiert werden (wir können keine Objekte abstrakter Klassen erstellen). Wir verwenden den abstract
Schlüsselwort zum Deklarieren einer abstrakten Klasse. Zum Beispiel
// create an abstract class
abstract class Language {
// fields and methods
}
...
// try to create an object Language
// throws an error
Language obj = new Language();
Eine abstrakte Klasse kann sowohl reguläre Methoden als auch abstrakte Methoden haben. Zum Beispiel
abstract class Language {
// abstract method
abstract void method1();
// regular method
void method2() {
System.out.println("This is regular method");
}
}
Um mehr über die nicht abstrakten Methoden zu erfahren, besuchen Sie Java-Methoden. Hier lernen wir abstrakte Methoden kennen.
Abstrakte Java-Methode
Eine Methode, die keinen Körper hat, wird als abstrakte Methode bezeichnet. Wir verwenden denselben abstract
Schlüsselwort zum Erstellen abstrakter Methoden. Zum Beispiel
abstract void display();
Hier, display()
ist eine abstrakte Methode. Der Körper von display()
wird durch ;
ersetzt .
Wenn eine Klasse eine abstrakte Methode enthält, sollte die Klasse als abstrakt deklariert werden. Andernfalls wird ein Fehler generiert. Zum Beispiel
// error
// class should be abstract
class Language {
// abstract method
abstract void method1();
}
Beispiel:Abstrakte Java-Klasse und -Methode
Obwohl abstrakte Klassen nicht instanziiert werden können, können wir daraus Unterklassen erstellen. Wir können dann über das Objekt der Unterklasse auf Mitglieder der abstrakten Klasse zugreifen. Zum Beispiel
abstract class Language {
// method of abstract class
public void display() {
System.out.println("This is Java Programming");
}
}
class Main extends Language {
public static void main(String[] args) {
// create an object of Main
Main obj = new Main();
// access method of abstract class
// using object of Main class
obj.display();
}
}
Ausgabe
This is Java programming
Im obigen Beispiel haben wir eine abstrakte Klasse namens Language erstellt . Die Klasse enthält eine reguläre Methode display()
.
Wir haben die Hauptklasse erstellt, die die abstrakte Klasse erbt. Beachten Sie die Anweisung,
obj.display();
Hier, obj ist das Objekt der untergeordneten Klasse Main . Wir rufen die Methode der abstrakten Klasse über das Objekt obj auf .
Abstrakte Methoden implementieren
Wenn die abstrakte Klasse eine abstrakte Methode enthält, müssen alle von der abstrakten Oberklasse geerbten untergeordneten Klassen die Implementierung der abstrakten Methode bereitstellen. Zum Beispiel
abstract class Animal {
abstract void makeSound();
public void eat() {
System.out.println("I can eat.");
}
}
class Dog extends Animal {
// provide implementation of abstract method
public void makeSound() {
System.out.println("Bark bark");
}
}
class Main {
public static void main(String[] args) {
// create an object of Dog class
Dog d1 = new Dog();
d1.makeSound();
d1.eat();
}
}
Ausgabe
Bark bark I can eat.
Im obigen Beispiel haben wir eine abstrakte Klasse Animal erstellt . Die Klasse enthält eine abstrakte Methode makeSound()
und eine nicht abstrakte Methode eat()
.
Wir haben eine Unterklasse Dog geerbt aus der Oberklasse Animal . Hier die Unterklasse Dog stellt die Implementierung für die abstrakte Methode makeSound()
bereit .
Wir haben dann das Objekt d1 verwendet des Hundes Klasse zum Aufrufen von Methoden makeSound()
und eat()
.
Hinweis :Wenn der Hund Klasse bietet nicht die Implementierung der abstrakten Methode makeSound()
, Hund sollten ebenfalls als abstrakt deklariert werden. Dies liegt daran, dass die Unterklasse Dog erbt makeSound()
von Tier .
Greift auf den Konstruktor abstrakter Klassen zu
Eine abstrakte Klasse kann Konstruktoren wie die reguläre Klasse haben. Und wir können auf den Konstruktor einer abstrakten Klasse aus der Unterklasse zugreifen, indem wir den super
verwenden Stichwort. Zum Beispiel
abstract class Animal {
Animal() {
….
}
}
class Dog extends Animal {
Dog() {
super();
...
}
}
Hier haben wir den super()
verwendet innerhalb des Konstruktors von Dog um auf den Konstruktor von Animal zuzugreifen .
Beachten Sie, dass der super
sollte immer die erste Anweisung des Unterklassenkonstruktors sein. Besuchen Sie das Java-Super-Schlüsselwort, um mehr zu erfahren.
Java-Abstraktion
Der Hauptzweck abstrakter Klassen und Methoden besteht darin, in Java Abstraktion zu erreichen.
Abstraktion ist ein wichtiges Konzept der objektorientierten Programmierung, das es uns ermöglicht, unnötige Details auszublenden und nur die benötigten Informationen anzuzeigen.
Auf diese Weise können wir die Komplexität bewältigen, indem wir Details mit einer einfacheren Idee auf höherer Ebene weglassen oder verbergen.
Ein praktisches Beispiel für Abstraktion können Motorradbremsen sein. Wir wissen, was Bremsen tun. Wenn wir die Bremse betätigen, hält das Motorrad an. Die Funktionsweise der Bremse bleibt uns jedoch verborgen.
Der Hauptvorteil des Versteckens der Funktionsweise der Bremse besteht darin, dass der Hersteller nun die Bremse für verschiedene Motorräder unterschiedlich implementieren kann, die Bremse jedoch dieselbe ist.
Nehmen wir ein Beispiel, das uns hilft, die Java-Abstraktion besser zu verstehen.
Beispiel 3:Java-Abstraktion
abstract class MotorBike {
abstract void brake();
}
class SportsBike extends MotorBike {
// implementation of abstract method
public void brake() {
System.out.println("SportsBike Brake");
}
}
class MountainBike extends MotorBike {
// implementation of abstract method
public void brake() {
System.out.println("MountainBike Brake");
}
}
class Main {
public static void main(String[] args) {
MountainBike m1 = new MountainBike();
m1.brake();
SportsBike s1 = new SportsBike();
s1.brake();
}
}
Ausgabe :
MountainBike Brake SportsBike Brake
Im obigen Beispiel haben wir eine abstrakte Oberklasse MotorBike erstellt . Das MotorBike der Superklasse hat eine abstrakte Methode brake()
.
Die brake()
-Methode kann nicht innerhalb von MotorBike implementiert werden . Dies liegt daran, dass jedes Fahrrad eine andere Implementierung von Bremsen hat. Also alle Unterklassen von MotorBike hätte eine andere Implementierung von brake()
.
Also die Implementierung von brake()
in Motorrad wird verborgen gehalten.
Hier, MountainBike macht seine eigene Implementierung von brake()
und SportsBike macht seine eigene Implementierung von brake()
.
Hinweis :Wir können auch Schnittstellen verwenden, um in Java Abstraktion zu erreichen. Um mehr zu erfahren, besuchen Sie Java Interface.
Wichtige Punkte, die Sie sich merken sollten
- Wir verwenden den
abstract
Schlüsselwort zum Erstellen abstrakter Klassen und Methoden. - Eine abstrakte Methode hat keine Implementierung (Methodenkörper).
- Eine Klasse, die abstrakte Methoden enthält, sollte auch abstrakt sein.
- Wir können keine Objekte einer abstrakten Klasse erstellen.
- Um Features einer abstrakten Klasse zu implementieren, erben wir Unterklassen von ihr und erstellen Objekte der Unterklasse.
- Eine Unterklasse muss alle abstrakten Methoden einer abstrakten Klasse überschreiben. Wenn die Unterklasse jedoch als abstrakt deklariert ist, müssen abstrakte Methoden nicht zwingend überschrieben werden.
- Wir können auf die statischen Attribute und Methoden einer abstrakten Klasse zugreifen, indem wir die Referenz der abstrakten Klasse verwenden. Beispiel:
Animal.staticMethod();
Java