16.4 Vererbung
 
Eine der großen Stärken der objektorientierten Programmierung liegt in der Vererbung, die einen hierarchischen Aufbau von Klassen erlaubt. Eine Freundin ist beispielsweise in den meisten Fällen eine Spezialisierung von Frau.
Zum Vergleich: ActionScript 1
Die klassische Schreibweise in ActionScript ist hier mehr als nur gewöhnungsbedürftig und verwendet ein auf Prototypen basierendes Konzept wie JavaScript. Dazu wird im Prototyp der Unterklasse eine Instanz der Oberklasse platziert, was dann zu einer Prototypenkette führt, die wie eine Vererbung funktioniert:
// ActionScript 1 Code!
ActionScript 2.0\Vererbung
function Frau() {
// Definiere Eigenschaft
this.launig = true;
}
// Definiere Fähigkeit
Frau.prototype.koche = function() {
trace("lecker!");
};
function Freundin() {
// Erbe Eigenschaften (Konstruktor)
super();
// Definiere Eigenschaft
this.kreativ = true;
}
// Erbe Fähigkeiten (Prototyp)
Freundin.prototype = new Frau();
// Definiere Fähigkeit
Freundin.prototype.tanze = function() {
trace("yippi!");
};
16.4.1 extends
 
ActionScript 2.0
Um mit ActionScript 2.0 eine Klasse zu erstellen, die von einer anderen Klasse erbt, benötigen Sie das Schlüsselwort extends. Mit diesem geben Sie innerhalb der erbenden Unterklasse die zu vererbende Oberklasse an:
class Unterklasse extends Oberklasse {
}
Im folgenden Beispiel erbt die Klasse Freundin von der Klasse Frau alle Eigenschaften und Methoden:
// ActionScritp 2.0-Code in Klassendatei
class Frau {
// Definiere Eigenschaft
var launig;
// Konstruktor (optional)
function Frau() {
// Setze Eigenschaft
launig = true;
}
// Definiere Fähigkeit
function koche() {
trace("lecker!");
}
}
// ActionScritp 2.0-Code in Klassendatei
class Freundin extends Frau {
// Definiere Eigenschaft
var kreativ;
// Konstruktor (optional)
function Freundin() {
// Setze Eigenschaft
kreativ = true;
}
// Definiere Fähigkeit
function tanze() {
trace("yippi!");
}
}
Wie bereits in ActionScript 1 können Sie innerhalb einer Methode auch auf die Methode der Oberklasse zugreifen, indem super zum Einsatz kommt:
function koche() {
super.koche();
}
Bedenken Sie aber bitte, dass letztendlich der Bytecode in der SWF-Datei sich so gut wie gar nicht von der Version mit der eigentümlichen Prototypen-Schreibweise unterscheidet. In erster Linie verbessert sich dadurch nur der Quellcode, was zu einer viel effizienteren Entwicklung führt. Denn es gibt kein Problem, das sich nicht auch mit ActionScript 1 lösen ließe – mit ActionScript 2.0 gelingt dies einfach nur viel eleganter!
Übrigens: Eine Mehrfachvererbung erlaubt auch ActionScript 2.0 nicht. Mit Hilfe von Schnittstellen (Interfaces) kann aber ein ähnliches Verhalten implementiert werden.
Kleine Unterschiede gibt es doch!
Zwar erzeugt der Flash-Compiler aus ActionScript 1 und ActionScript 2.0 denselben Bytecode, doch nicht ohne kleine Unterschiede. Beispielsweise wird bei der Vererbung eine Instanz der Oberklasse innerhalb der Prototypenkette der Unterklasse platziert, um so Vererbung zu ermöglichen (Seite 350). Doch im Gegensatz zu ActionScript 1 wird bei ActionScript 2.0 dafür der Konstruktor der Oberklasse nicht aufgerufen. Dies gilt aber nur, wenn das Projekt als Flash Player 7-Datei exportiert wird. Beim Export nach Flash 6 steht hier die Abwärtskompatibilität im Vordergrund.
|