Junior
Was ist der Kern einer abstrakten Klasse?
sobes.tech KI
Antwort von AI
Der Zweck einer abstrakten Klasse besteht darin, als Vorlage für andere Klassen zu dienen. Sie kann nicht direkt erstellt werden, kann aber abstrakte Methoden (ohne Körper) enthalten, die in den abgeleiteten Klassen implementiert werden müssen, sowie konkrete Methoden und Eigenschaften.
Wichtige Punkte:
- Kann keine Instanz erstellt werden:
new AbstrakteKlasse()führt zu einem Fehler. - Vererbung: Es kann nur von einer abstrakten Klasse geerbt werden (
extends). - Abstrakte Methoden: Definieren die Schnittstelle, die die abgeleiteten Klassen implementieren müssen. Sie werden mit dem Schlüsselwort
abstractgekennzeichnet und haben keinen Körper. - Konkrete Methoden und Eigenschaften: Können direkt definiert und verwendet werden, sowie in den abgeleiteten Klassen überschrieben werden.
- Teilweise Implementierung: Bietet eine allgemeine Struktur und einige Grundfunktionalitäten, wobei die Details der Implementierung den abgeleiteten Klassen überlassen bleiben.
Beispiel:
<?php
abstract class Figur {
protected $farbe;
public function __construct($farbe) {
$this->farbe = $farbe;
}
abstract public function berechneFlaeche(); // Abstrakte Methode
public function bekommeFarbe() {
return $this->farbe;
}
}
class Kreis extends Figur {
private $radius;
public function __construct($farbe, $radius) {
parent::__construct($farbe);
$this->radius = $radius;
}
public function berechneFlaeche() {
return pi() * $this->radius * $this->radius;
}
}
class Quadrat extends Figur {
private $seite;
public function __construct($farbe, $seite) {
parent::__construct($farbe);
$this->seite = $seite;
}
public function berechneFlaeche() {
return $this->seite * $this->seite;
}
}
// Beispielverwendung
$kreis = new Kreis("Rot", 5);
echo "Fläche des Kreises: " . $kreis->berechneFlaeche() . ", Farbe: " . $kreis->bekommeFarbe() . "\n";
$quadrat = new Quadrat("Blau", 4);
echo "Fläche des Quadrats: " . $quadrat->berechneFlaeche() . ", Farbe: " . $quadrat->bekommeFarbe() . "\n";
// Der folgende Code führt zu einem fatalen Fehler: Instanziierung einer abstrakten Klasse
// $abstrakteFigur = new Figur("Unbekannt");
Vergleichstabelle mit Schnittstellen und normalen Klassen:
| Merkmal | Abstrakte Klasse | Schnittstelle | Normale Klasse |
|---|---|---|---|
| Instanz erstellen | Nein | Nein | Ja |
| Vererbung | Ja (extends) + Implementierung (implements) |
Nur Implementierung (implements) |
Ja (extends) |
| Methoden | Konkrete und abstrakte Methoden | Nur abstrakte (ohne Körper) | Nur konkrete |
| Eigenschaften | Ja | Nein | Ja |
| Mehrfachvererbung | Nein | Ja | Nein |
| Verwendungszweck | Teilweise Implementierung, allgemeine Struktur | Definition eines Vertrags (Verhalten) | Vollständige Implementierung, konkretes Objekt |
Wird verwendet, wenn es gemeinsame Logik und Eigenschaften gibt, die bei einer Gruppe verwandter Klassen vorhanden sein sollen, deren konkretes Verhalten (Implementierung einiger Methoden) jedoch unterschiedlich ist. Es ermöglicht die Wiederverwendung von Code und Einheitlichkeit in der Klassenstruktur.