English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java Grund教程

Java-Flusssteuerung

Java Array

Java objektorientiert (I)

Java objektorientiert (II)

Java objektorientiert (III)

Java Ausnahmenbehandlung

Java Liste(List)

Java Queue(Stapel)

Java Map-Kollektion

Java Set-Kollektion

Java Eingabe-Ausgabe(I/O)

Java Reader/Writer

Andere Themen von Java

Java Abstrakte Klassen und Methoden

In diesem Tutorial werden wir Java-Abstraktes lernen. Wir werden Java-Abstrakte Klassen und Methoden sowie deren Verwendung in Programmen lernen.

Java abstrakte Klasse

Abstrakte Klassen sind Klassen, die nicht instanziert werden können (wir können keine Objekte einer abstrakten Klasse erstellen). In Java verwenden wir den abstrakten Schlüsselwort, um eine abstrakte Klasse zu deklarieren.

abstract class Animal {
   //Eigenschaften und Methoden
}

Wenn versucht wird, ein Objekt einer abstrakten Klasse zu erstellen, wird ein Kompilationsfehler auftreten. Zum Beispiel:

Animal a1 = new Animal()

Es wird einen Kompilationsfehler verursachen:

 Animal ist abstrakt; kann nicht instanziert werden

Obwohl wir keine abstrakten Klassen instanziieren können, können wir aus ihnen Unterklasse erstellen. Wir können Objekte der Unterklasse erstellen, um auf die Mitglieder der abstrakten Klasse zuzugreifen.

Bevor wir es im Detail verstehen, müssen wir die abstrakten Methoden verstehen.

Java abstrakte Methoden

Wir verwenden denselben Schlüsselwort abstract, um abstrakte Methoden zu erstellen. Eine abstrakte Methode wird deklariert, aber nicht implementiert. Zum Beispiel

abstract void makeSound();

Hier ist makeSound() eine abstrakte Methode.

Es ist wichtig zu beachten, dass nur eine abstrakte Klasse abstrakte Methoden enthalten kann. Wenn wir in einer nicht-abstrakten Klasse abstrakte Methoden enthalten, wird ein Fehler aufgetreten.

Abstrakte Klassen können abstrakte und nicht-abstrakte Methoden enthalten. Dies ist ein Beispiel.

abstract class Animal {
   public void displayInfo() {
      System.out.println("Ich bin ein Tier.");
   }
   abstract void makeSound();
}

In diesem Beispiel haben wir eine abstrakte Klasse Animal erstellt. Diese Klasse enthält einen abstrakten Methoden makeSound() und eine nicht-abstrakte Methode displayInfo().

Vererbung von abstrakten Klassen

Abstrakte Klassen können nicht instanziert werden. Um auf die Mitglieder einer abstrakten Klasse zuzugreifen, müssen wir sie vererben. Zum Beispiel

Beispiel1:Vererbung von abstrakten Klassen

abstract class Animal {
 public void displayInfo() {
   System.out.println("Ich bin ein Tier.");
 }
}
class Dog extends Animal {
}
class Main {
 public static void main(String[] args) {
   Dog d1 = new Dog();
   d1.displayInfo();
 }
}

Ausgabe:

Ich bin ein Tier.

In diesem Beispiel haben wir eine abstrakte Klasse Animal erstellt. Wir können keine Objekte der Klasse Animal erstellen. Um auf die displayInfo()-Methode der Klasse Animal zuzugreifen, haben wir die Unterklasse Dog von Animal geerbt.

Dann verwenden wir die d von Dog1Das Objekt ruft die displayInfo()-Methode auf.

Methodenüberschreibung

In Java müssen die abstrakten Methoden der Superklasse in der Unterklasse überschrieben werden. Dies liegt daran, dass die Unterklasse die abstrakten Methoden der Superklasse geerbt hat.

 Da unsere Unterklasse abstrakte Methoden enthält, müssen wir diese überschreiben.

Hinweis:Wenn die Unterklasse auch als abstrakt deklariert wird, muss die abstrakte Methode nicht zwingend überschrieben werden.

Beispiel2:Methodenüberschreibung

abstract class Animal {
   abstract void makeSound();
   public void eat() {
      System.out.println("Ich kann essen.");
   }
}
class Dog extends Animal {
   public void makeSound() {
      System.out.println("Bark bark");
   }
}
class Main {
   public static void main(String[] args) {
      Dog d1 = new Dog();
      d1.makeSound();
      d1.eat();
   }
}

Ausgabe:

Bark bark.
Ich kann essen.

In diesem Beispiel haben wir eine abstrakte Klasse Animal erstellt. Diese Klasse enthält einen abstrakten Methoden makeSound() und eine nicht-abstrakte Methode eat().

Wir haben eine Unterklasse Dog von der Superklasse Animal geerbt. Hier überschreibt die Unterklasse Dog den abstrakten Methoden displayInfo().

 Dann haben wir das Dog-Objekt d erstellt1。使用该对象,我们调用了d1.displayInfo() und d1.eat() Methode.

Zugriff auf den Konstruktor der abstrakten Klasse

Wie bei nicht-abstrakten Klassen verwenden wir den Schlüsselwort super, um den Konstruktor der abstrakten Klasse aus der Unterklasse aufzurufen. Zum Beispiel,

abstract class Animal {
   Animal() {
      ...
   }
}
class Dog extends Animal {
   Dog() {
      super();
      ...
   }
}

Hier verwenden wir den Konstruktor super() im Dog-Objekt, um den Konstruktor der Animal-Klasse aufzurufen.

Beachten Sie, dass super immer das erste Statement im Konstruktor der Unterklasse sein sollte. ZugriffJava-Super-SchlüsselwortFür weitere Informationen.

Warum Java-Abstraktion verwenden?

Die Abstraktion ist eine wichtige Konzeption der objektorientierten Programmierung. Abstraktion zeigt nur die erforderlichen Informationen, und alle unnötigen Details bleiben versteckt. Dies ermöglicht es uns, Komplexität zu verwalten, indem wir Details durch einfachere, höhere Ideen überspringen oder verbergen.

Ein tatsächliches Beispiel für die Abstraktion kann die Motorradbremse sein. Wir wissen, dass das Bremsen das Motorrad zum Anhalten bringt. Aber das Funktionsprinzip der Bremsen bleibt für uns verborgen.

Ein wichtiger Vorteil der Versteckung des Funktionsprinzips der Bremsen ist, dass die Hersteller jetzt für verschiedene Motorräder unterschiedliche Bremsen verwenden können, aber die Funktion der Bremsen ist gleich.

Lassen Sie uns einen Beispielfall anführen, um uns besser mit der Java-Abstraktion vertraut zu machen.

Beispiel3:Java-Abstraktion

abstract class Animal {
   abstract void makeSound();
}
class Dog extends Animal {
   public void makeSound() {
      System.out.println("Bark bark.");
   }
}
class Cat extends Animal {
   public void makeSound() {
      System.out.println("Meows ");
   }
}
class Main {
   public static void main(String[] args) {
      Dog d1 = new Dog();
      d1.makeSound();
      Cat c1 = new Cat();
      c1.makeSound();
   }
}

Ausgabe:

Bark bark
Meows

Im obigen Beispiel haben wir eine Oberklasse Animal erstellt. Die Oberklasse Animal hat die abstrakte Methode makeSound().

Das makeSound()-Verfahren kann nicht im Animal-Objekt implementiert werden. Dies liegt daran, dass jedes Tier eine unterschiedliche Stimme von sich gibt. Daher haben alle Unterklasse von Animal unterschiedliche Implementierungen des makeSound()-Verfahrens.

Wir können makeSound() in Animal nicht auf die gleiche Weise wie für alle Unterklassen von Animal korrekt implementieren. Daher bleibt die Implementierung von makeSound() in Animal im Verborgenen.

 Im obigen Beispiel hat Dog seine eigene makeSound()-Implementierung, Cat seine eigene makeSound()-Implementierung.

Zu beachtende Punkte

  • Wir verwenden den abstract-Schlüsselwort, um abstrakte Klassen und Methoden zu erstellen.

  • Abstrakte Methoden haben keine Implementierung (Methodekörper).

  • Eine Klasse, die abstrakte Methoden enthält, sollte ebenfalls abstrakt sein.

  • Wir können keine Objekte der abstrakten Klasse erstellen.

  • Um die Funktionen der abstrakten Klasse zu realisieren, erben wir von der abstrakten Klasse und erstellen ein Objekt dieser Unterklasse.

  • Die Unterklassen müssen alle abstrakten Methoden der abstrakten Klasse überschreiben. Wenn die Unterklasse jedoch als abstrakt deklariert wird, ist es nicht erforderlich, die abstrakten Methoden zwingend zu überschreiben.

  • Wir können auf die statischen Attribute und Methoden der abstrakten Klasse über einen Verweis auf die abstrakte Klasse zugreifen. Zum Beispiel:

    Animal.staticMethod();

Java Schnittstelle

In Java sind Schnittstellen ähnlich wie abstrakte Klassen. Allerdings haben Schnittstellen keine nicht-abstrakten Methoden. In dem nächsten Tutorial werden wir mehr über Schnittstellen lernen.