Inhaltsverzeichnis
Algorithmus
Grammatik
Methode
Abstrakte Klasse instanziieren
Beispiel
Ausgabe
Beispiel 1: Konkrete Unterklasse
Beispiel 2: Lambda-Ausdruck
Fazit
Heim Java javaLernprogramm Wie instanziiere ich eine abstrakte Klasse in Java?

Wie instanziiere ich eine abstrakte Klasse in Java?

Aug 28, 2023 pm 11:45 PM
java 抽象类 (abstract class) 实例化 (instantiate)

Wie instanziiere ich eine abstrakte Klasse in Java?

Eine abstrakte Klasse ist eine Klasse, die in Java über das Schlüsselwort „Abstract“ deklariert wird. Abstrakte Klassen sind ein Konzept in einem der vier Prinzipien der objektorientierten Programmierung (OOP), das als „Vererbung“ bezeichnet wird. Vererbung bezieht sich auf eine Funktion von Java-Klassen, bei der eine als „Unterklasse“ bezeichnete Klasse alle Eigenschaften der Klasse erbt. Die übergeordnete Klasse wird oft als „Superklasse“ bezeichnet.

In Java bezieht sich eine abstrakte Klasse auf eine Basis-Superklasse, von der andere Unterklassen erben können. Es kann sowohl abstrakte als auch nicht abstrakte Methoden enthalten.

Algorithmus

  • Schritt 1 – Identifizieren Sie die Methoden in der Klasse, die über eine Standardimplementierung oder keine Implementierung verfügen.

  • Schritt 2 – Entfernen Sie die Implementierung dieser Methoden.

  • Schritt 3 – Fügen Sie das abstrakte Schlüsselwort zur Klassendeklaration hinzu.

  • Schritt 4 – Fügen Sie das abstrakte Schlüsselwort zur in Schritt 2 geänderten Methodendeklaration hinzu.

  • Schritt 5 – Wenn die Klasse Instanzvariablen hat, die initialisiert werden müssen, fügen Sie einen Konstruktor hinzu, um sie zu initialisieren.

  • Schritt 6 – Aktualisieren Sie alle Unterklassen der abstrakten Klasse, um abstrakte Methoden zu implementieren oder sich selbst abstrakt zu machen.

Grammatik

Sehen wir uns die Syntax zum Instanziieren abstrakter Klassen in Java an -

// Abstract Class
abstract class Shape {
   public abstract void draw();
}
Nach dem Login kopieren

Methode

Da abstrakte Klassen unvollständige Klassen sind, können sie nicht direkt mit dem Schlüsselwort „new“ instanziiert werden.

  • Konkrete Unterklassen – Um eine mehrdeutige oder unvollständige abstrakte Klasse korrekt zu instanziieren, besteht die Möglichkeit, eine konkrete Unterklasse zu verwenden. Durch die nahtlose Erweiterung von dieser übergeordneten Abstraktion und die Implementierung aller ihrer Methodenanforderungen können Benutzer diese neu instanziierte Unterklasse erfolgreich erstellen und implementieren, ohne Fehler oder Inkonsistenzen in ihrem Betrieb.

  • Lambda-Ausdruck – Um ein Objekt aus einer abstrakten Klasse zu erstellen, haben Sie eine andere Möglichkeit – den Lambda-Ausdruck zu verwenden, der die Implementierung für alle seine Abstraktionen bereitstellt. Diese Lambda-Erstellung wird dann basierend auf diesen Signaturen einer kompatiblen Funktionsschnittstellenvariablen zugewiesen.

Abstrakte Klasse instanziieren

Sehen wir uns einen Beispielcodeausschnitt an, um die Verwendung abstrakter Klassen zu verstehen. Das erste Szenario stellt Code mit nicht abstrakten Klassen bereit.

Beispiel

class Shape {
   public void printName() {  
      System.out.println("I'm a shape"); 
   }
    
   public float area() {  
      return 0;  
   }
    
   public void printDetails() {  
      this.printName();
      System.out.println("... and my area is " + this.area());
   }
}

class Circle extends Shape {  
   private float radius;
    
   public Circle(float radius) {  
      this.radius = radius;
   }
    
   public void printName() {        
      System.out.println("I'm a circle");  
   }  
    
   public float area() {  
      return (float) (Math.PI * Math.pow(radius, 2));  
   }
}

class Rectangle extends Shape {  
   private float length;
   private float width;  
    
   public Rectangle(float length, float width) {
      this.length = length;  
      this.width = width;  
   }
    
   public void printName() {  
      System.out.println("I'm a rectangle");   
   } 
   
   public float area() {  
      return length * width;  
   }
}

public class Main {     
   public static void main(String[] args) {  
      Shape[] shapes = { new Circle(3.5f), new Rectangle(4.0f, 5.0f) };  
      for (Shape shape : shapes) {
         shape.printDetails();
      }
   }
}
Nach dem Login kopieren

Ausgabe

I'm a circle
... and my area is 38.48451
I'm a rectangle
... and my area is 20.0
Nach dem Login kopieren

Sowohl die Circle- als auch die Rechteck-Klasse erben die Methoden printName(), area() und printDetails() von der Superklasse „Shape“. Allerdings überschreibt keine der Klassen die Methode „area()“, um eine eigene Implementierung bereitzustellen.

Durch Aufrufen der printDetails()-Methode des Circle-Objekts lautet die Ausgabe „Ich bin ein Kreis ... und meine Fläche beträgt 38,48451“. Ebenso wird beim Aufruf der printDetails()-Methode für ein Rechteckobjekt Folgendes ausgegeben: „Ich bin ein Rechteck ... und meine Fläche beträgt 20,0“. Dadurch wird sichergestellt, dass die Ausgabe die richtige Form und den entsprechenden Bereich entsprechend der spezifischen Implementierung in jeder Klasse widerspiegelt

Beispiel 1: Konkrete Unterklasse

// With abstract class
abstract class Shape {
   public abstract void printName();
   public abstract float area();
   public void printDetails() {
      this.printName();
      System.out.println("... and my area is " + this.area());
   }
}

// Concrete class
class Circle extends Shape {
   private float radius;
   public Circle(float radius) {
      this.radius = radius;
   }
   public void printName() {
      System.out.print("I'm a circle");
   }
   public float area() {
      return (float) (Math.PI * Math.pow(radius, 2));
   }
}

// Concrete class
class Rectangle extends Shape {
   private float length;
   private float width;
   public Rectangle(float length, float width) {
      this.length = length;
      this.width = width;
   }
   public void printName() {
      System.out.print("I'm a rectangle");
   }
   public float area() {
      return length * width;
   }
}

// Main class
public class Main {
   public static void main(String[] args) {
      Shape[] shapes = { new Circle(10), new Rectangle(5, 10) };
      for (Shape shape : shapes) {
         shape.printDetails();
      }
   }
}
Nach dem Login kopieren

Ausgabe

I'm a circle... and my area is 314.15927
I'm a rectangle... and my area is 50.0
Nach dem Login kopieren

Im aktualisierten Code oben implementieren die Klassen Circle und Rechteck die abstrakten Methoden printName() und area(), die in der abstrakten Klasse „Shape“ definiert sind. Die printDetails()-Methode in der Shape-Klasse kann diese Methoden verwenden, um den Namen der Form und ihren jeweiligen Bereich auszudrucken.

Indem wir Shape zu einer abstrakten Klasse machen und abstrakte Methoden definieren, stellen wir sicher, dass jede Klasse, die die Shape-Klasse erweitert, ihre eigene Implementierung für die Methoden printName() und area() bereitstellen muss.

Beispiel 2: Lambda-Ausdruck

interface Nameable {
   String getName();
}
 
abstract class Shape {
   private Nameable nameable;
 
   public Shape(Nameable nameable) {
      this.nameable = nameable;
   }
 
   public abstract float area();
 
   public void printDetails() {
      System.out.println("I'm a " + nameable.getName() + " ... and my area is " + this.area());
   }
}
 
class Circle extends Shape {
   private float radius;
 
   public Circle(float radius) {
      super(() -> "circle");
      this.radius = radius;
   }
 
   @Override
   public float area() {
      return (float) (Math.PI * Math.pow(radius, 2));
   }
}
 
class Rectangle extends Shape {
   private float width;
   private float height;
 
   public Rectangle(float width, float height) {
      super(() -> "rectangle");
      this.width = width;
      this.height = height;
   }
 
   @Override
   public float area() {
      return width * height;
   }
}
 
public class Main {
   public static void main(String[] args) {
      Shape[] shapes = { new Circle(10), new Rectangle(5, 10) };
      for (Shape shape : shapes) {
         shape.printDetails();
      }
   }
}
Nach dem Login kopieren

Ausgabe

I'm a circle ... and my area is 314.15927
I'm a rectangle ... and my area is 50.0
Nach dem Login kopieren

Im neuesten Update dieses Codes haben wir eine verbesserte Möglichkeit eingeführt, Shape als abstrakte Klasse anzugeben und gleichzeitig die Funktion getName() zu internalisieren. Eine weitere Verbesserung besteht in der Integration der printName-Methode, die die Daten von getName() erfolgreich nutzt, um den Namen jeder entsprechenden Form anzuzeigen. Für die Unterklassen „Circle“ und „Rechteck“ überschreiben sie jetzt den entsprechenden getName mithilfe eines Lambda-Ausdrucks, sodass die erwartete Form genau identifiziert wird.

Fazit

Zusammenfassend lässt sich sagen, dass eine abstrakte Klasse nur über ihre Basisunterklasse instanziiert werden kann, nicht direkt. Dies ist ein vererbtes Konzept.

Der Hauptgrund dafür ist, dass eine abstrakte Klasse keine vollständige Implementierung ihrer Methoden und Objekte ist, sondern von Unterklassen verwendet wird, um diese zu erben.

Das obige ist der detaillierte Inhalt vonWie instanziiere ich eine abstrakte Klasse in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Java -Programm, um das Kapselvolumen zu finden Java -Programm, um das Kapselvolumen zu finden Feb 07, 2025 am 11:37 AM

Kapseln sind dreidimensionale geometrische Figuren, die aus einem Zylinder und einer Hemisphäre an beiden Enden bestehen. Das Volumen der Kapsel kann berechnet werden, indem das Volumen des Zylinders und das Volumen der Hemisphäre an beiden Enden hinzugefügt werden. In diesem Tutorial wird erörtert, wie das Volumen einer bestimmten Kapsel in Java mit verschiedenen Methoden berechnet wird. Kapselvolumenformel Die Formel für das Kapselvolumen lautet wie folgt: Kapselvolumen = zylindrisches Volumenvolumen Zwei Hemisphäre Volumen In, R: Der Radius der Hemisphäre. H: Die Höhe des Zylinders (ohne die Hemisphäre). Beispiel 1 eingeben Radius = 5 Einheiten Höhe = 10 Einheiten Ausgabe Volumen = 1570,8 Kubikeinheiten erklären Berechnen Sie das Volumen mithilfe der Formel: Volumen = π × R2 × H (4

Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Oct 13, 2024 pm 01:32 PM

Java ist eine beliebte Programmiersprache, die sowohl von Anfängern als auch von erfahrenen Entwicklern erlernt werden kann. Dieses Tutorial beginnt mit grundlegenden Konzepten und geht dann weiter zu fortgeschrittenen Themen. Nach der Installation des Java Development Kit können Sie das Programmieren üben, indem Sie ein einfaches „Hello, World!“-Programm erstellen. Nachdem Sie den Code verstanden haben, verwenden Sie die Eingabeaufforderung, um das Programm zu kompilieren und auszuführen. Auf der Konsole wird „Hello, World!“ ausgegeben. Mit dem Erlernen von Java beginnt Ihre Programmierreise, und wenn Sie Ihre Kenntnisse vertiefen, können Sie komplexere Anwendungen erstellen.

See all articles