In einem früheren Blogbeitrag haben wir ein sehr wichtiges Konzept der objektorientierten Programmierung vorgestellt: Klassen. Jetzt werden wir ein weiteres Kernkonzept durchgehen: Vererbung, der Mechanismus, der es einer Klasse ermöglicht, das Verhalten einer anderen Klasse zu übernehmen.
Erinnern Sie sich an das Beispiel aus dem letzten Blogbeitrag mit der Klasse „Person“? Stellen wir uns eine Schule vor und wir wollen Schüler und Lehrer verwalten. Beide sind Personen, aber mit unterschiedlichen Eigenschaften. Wir erstellen also eine Klasse „Lehrer“ und eine Klasse „Schüler“, und beide Klassen erben Eigenschaften von der Klasse „Person“.
Wie kann man eine Klasse von einer anderen erben?
Ein neues Class extends Schlüsselwort ist jetzt verfügbar, um die Vererbung zu erleichtern. In unserem Schulbeispiel erstellen wir eine Klasse „Student“, die von der Klasse „Person“ erbt.
Class Extends Person
Und der Konstruktor?
Dann wird für den Konstruktor (wenn Sie keinen speziellen Konstruktor für die Klasse „Schüler“ definiert haben) automatisch der Konstruktor der Klasse „Person“ aufgerufen.
Sie können auch einen Konstruktor außer Kraft setzen. Zum Beispiel im Fall von „Student“: Ein Schüler hat einen Namen, einen Nachnamen und ein Geburtsdatum wie eine Person, aber ein Schüler hat auch eine Klasse und eine Schule. In diesem Fall können Sie den Befehl new Super Befehl verwenden, mit dem Sie den Konstruktor der Elternklasse aufrufen können. Im Konstruktor „Student“ können Sie dann den spezifischen Code für Note und Schule hinzufügen.
Class constructor
.
C_TEXT( ) ( ) ( ) ( ) ( ) ( ; ; ) $1 // FirstName
C_TEXT$2 // LastName
C_DATE$3 // Birthdate
C_TEXT$4 // SchoolName
C_TEXT$5 // Grade
Super$1$2$3 // Call the "Person" constructor
ThisSchoolName:= $4
This . :=Grade$5
Und die Funktionen?
Sie können spezifische Funktionen für die Klasse „Student“ hinzufügen, von denen aus Sie eine Funktion der übergeordneten Klasse („Person“) aufrufen können.
Im folgenden Beispiel haben wir eine Funktion, die eine Zeichenkette mit dem Namen, der Klasse und der Schule des Schülers zurückgibt. In der Klasse „Person“ haben wir bereits eine Funktion, die den vollständigen Namen einer Person zurückgibt. Wir rufen also diese Funktion getFullName auf und fügen die für einen Schüler spezifischen Informationen hinzu.
Function getIdentity
C_TEXT( ) := . ()+", "+ . +" Note in "+ .$0
$0SupergetFullNameThisGradeThisSchoolName
In einer Methode instanziieren wir eine Instanz der Klasse „Student“. Wir rufen die Funktion getFullName von der übergeordneten Klasse „Person“ auf. Dann rufen wir die Funktion getIdentity von der Klasse „Student“ aus auf. Wie Sie sehen können, gibt es keine Unterschiede zwischen den Funktionen getFullName und getIdentity.
C_OBJECT($s)
$s :=cs.Student.new("Joe"; "Doe";!2002-02-20!; "Waco High School"; "10th")
$name :=$s.getFullName() //return John Doe
$identity :=$s.getIdentity(
) //return Joe DOE, 10th grade in Waco High School