In diesem Beitrag untersuchen wir Abstrakte Klassen, einen wesentlichen Bestandteil der Abstraktion in Java. Wir bauen auf den zuvor besprochenen Konzepten auf und untersuchen, wie Abstraktion komplexe Systeme vereinfacht. Abstrakte Klassen dienen als Blaupause für andere Klassen und ermöglichen es uns, uns nur auf relevante Details zu konzentrieren und gleichzeitig unnötige Komplexität zu verbergen.
Lassen Sie uns tiefer eintauchen, was abstrakte Klassen sind, warum sie existieren und wie sie verwendet werden.
Eine abstrakte Klasse ist eine Klasse, die nicht alleine instanziiert werden kann. Es ist so konzipiert, dass es um Unterklassen erweitert werden kann, die konkrete Implementierungen für seine abstrakten Methoden bereitstellen. Mit anderen Worten: Eine abstrakte Klasse legt die Grundlage für ihre Unterklassen, ermöglicht die Wiederverwendung von Code und erzwingt die Struktur.
Definiert mit dem abstrakten Schlüsselwort.
Kann abstrakte Methoden (Methoden ohne Körper) enthalten, die von Unterklassen implementiert werden müssen.
Kann auch konkrete Methoden mit vollständigen Implementierungen haben.
Kann Konstruktoren, Felder und nicht abstrakte Methodendeklarieren.
Kann nicht direkt instanziiert werden.
Abstrakte Klassen ermöglichen Entwicklern, unnötige Implementierungsdetails vor dem Benutzer zu verbergen und gleichzeitig sicherzustellen, dass bestimmte Methoden von allen Unterklassen implementiert werden. Sie fungieren als halbdefinierte Vorlagen und fördern die Wiederverwendung von Code, indem sie gemeinsame Funktionen in der Basisklasse bereitstellen.
Um zu veranschaulichen, wie abstrakte Klassen funktionieren, schauen wir uns das folgende Beispiel an, das eine abstrakte EmployeeParent-Klasse und ihre ManagerChild-Unterklasse umfasst. Die übergeordnete Klasse verfügt über gemeinsame Funktionen, während die untergeordnete Klasse die Implementierung mit spezifischen Details wie Leistungsboni abschließt.
package oops.abstract_class; public abstract class EmployeeParent { private int id, depId; private String name; private double basicSal; public EmployeeParent(int id, String name, int deptId, double basicSal) { this.id = id; this.depId = deptId; this.name = name; this.basicSal = basicSal; } // Abstract method to be implemented by subclasses. protected abstract double computeNetSalary(); protected double getBasicSal() { return basicSal; } @Override public String toString() { return "EmployeeParent [id=" + id + ", depId=" + depId + ", name=" + name + ", basicSal=" + basicSal + "]"; } }
package oops.abstract_class; public class ManagerChild extends EmployeeParent { private double perfBonus; public ManagerChild(int id, String name, int deptId, double basicSal, double perfBonus) { // Calling the constructor of the abstract class. super(id, name, deptId, basicSal); this.perfBonus = perfBonus; } // Implementing the abstract method from EmployeeParent. @Override public double computeNetSalary() { return getBasicSal() + perfBonus; } @Override public String toString() { return "ManagerChild [perfBonus=" + perfBonus + "\n" + super.toString() + "]"; } public static void main(String[] args) { ManagerChild manager = new ManagerChild(1, "Arshi", 2, 10000, 1890); System.out.println(manager); System.out.println("Net Salary: " + manager.computeNetSalary()); // Abstract class cannot be instantiated EmployeeParent employee = new EmployeeParent(); // Compile Error } }
Im obigen Code:
EmployeeParent ist die abstrakte Klasse, die die Struktur für ihre Unterklassen definiert.
Es enthält sowohl konkrete Methoden (wie toString und getBasicSal) als auch eine abstrakte Methode (computeNetSalary), die von jeder Unterklasse implementiert werden muss.
ManagerChild erweitert EmployeeParent und stellt die spezifische Logik für die Berechnung des Nettogehalts, einschließlich des Leistungsbonus, bereit.
Der abstrakte Klassenkonstruktor wird über den super()-Aufruf im untergeordneten Klassenkonstruktor aufgerufen, da die abstrakte Klasse nicht direkt instanziiert werden kann.
Wiederverwendbarkeit des Codes: Wenn mehrere Klassen gemeinsame Felder und Verhaltensweisen haben.
Struktur erzwingen: Wenn Sie die Implementierung bestimmter Methoden in Unterklassen vorschreiben möchten.
Teilweise Implementierung: Wenn ein Teil der Logik zwischen den Klassen geteilt werden kann, während die spezifische Logik variiert.
Anwendungsfallbeispiel: Sie könnten eine abstrakte Shape-Klasse mit gemeinsamen Eigenschaften (wie Farbe) und abstrakten Methoden (wie getArea) haben, die verschiedene Formen (Kreis, Rechteck) unterschiedlich implementieren würden.
Abstrakte Klassen spielen in Java eine entscheidende Rolle, indem sie für ein Gleichgewicht zwischen vollständiger Abstraktion und konkreter Implementierung sorgen. Sie ermöglichen es Entwicklern, sich auf das Wesentliche zu konzentrieren und gleichzeitig komplizierte Details vor dem Benutzer zu verbergen. Das Verstehen und effektive Verwenden abstrakter Klassen ist ein wichtiger Schritt zur Beherrschung der objektorientierten Programmierung.
Bleiben Sie gespannt auf den nächsten Beitrag der Reihe, in dem wir Schnittstellen und deren Unterschiede zu abstrakten Klassen untersuchen!
Java-Grundlagen
Array Interview Essentials
Java Memory Essentials
Java Keywords Essentials
Collections Framework Essentials
Viel Spaß beim Codieren!
Das obige ist der detaillierte Inhalt vonAbstraktion: Abstrakte Klassen in Java dekodieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!