Heim  >  Artikel  >  Java  >  Abstraktion: Abstrakte Klassen in Java dekodieren

Abstraktion: Abstrakte Klassen in Java dekodieren

Barbara Streisand
Barbara StreisandOriginal
2024-10-30 08:09:03920Durchsuche

Abstraction: Decoding Abstract Classes in Java

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.


Was ist eine abstrakte Klasse?

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.

Hauptmerkmale abstrakter Klassen:

  • 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.


Warum abstrakte Klassen?

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.


Beispiel: Mitarbeiter und Manager

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.

EmployeeParent.java

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 + "]";
    }
}

ManagerChild.java

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
    }
}

Das Beispiel aufschlüsseln

Im obigen Code:

  1. EmployeeParent ist die abstrakte Klasse, die die Struktur für ihre Unterklassen definiert.

  2. Es enthält sowohl konkrete Methoden (wie toString und getBasicSal) als auch eine abstrakte Methode (computeNetSalary), die von jeder Unterklasse implementiert werden muss.

  3. ManagerChild erweitert EmployeeParent und stellt die spezifische Logik für die Berechnung des Nettogehalts, einschließlich des Leistungsbonus, bereit.

  4. Der abstrakte Klassenkonstruktor wird über den super()-Aufruf im untergeordneten Klassenkonstruktor aufgerufen, da die abstrakte Klasse nicht direkt instanziiert werden kann.


Wann sollten Sie abstrakte Klassen verwenden?

  • 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.


Abschluss

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!


Verwandte Beiträge

  • 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!

Stellungnahme:
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