klassen2:polymorphismus:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— | klassen2:polymorphismus:start [2024/08/31 12:03] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Überschreiben von Methoden, Polymorphismus ====== | ||
+ | Im folgenden Beispiel sind die Klassen '' | ||
+ | <code learnj> | ||
+ | abstract class Figur { | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | this.farbe = farbe; | ||
+ | } | ||
+ | |||
+ | | ||
+ | println(" | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </ | ||
+ | Die Klasse '' | ||
+ | ==== Überschreiben von Methoden ==== | ||
+ | Wir schreiben in die Klasse '' | ||
+ | Natürlich soll auch bei Rechtecken neben der Länge und der Breite noch deren Farbe ausgegeben werden. Wir wollen daher in der Methode '' | ||
+ | <WRAP center round info 60%> | ||
+ | **Wir erinnern uns:** \\ | ||
+ | Innerhalb des Konstruktors einer Unterklasse ist der Aufruf des Konstruktors der Oberklasse mittels '' | ||
+ | </ | ||
+ | |||
+ | <code learnj [enable_line_numbers=" | ||
+ | class Rechteck extends Figur { | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | super(farbe); | ||
+ | this.breite = breite; | ||
+ | this.höhe = höhe; | ||
+ | } | ||
+ | |||
+ | | ||
+ | super.schreibeDaten(); | ||
+ | println(" | ||
+ | println(" | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Wird nun bei einem '' | ||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | Figur f1 = new Rechteck(" | ||
+ | Figur f2 = new Kreis(" | ||
+ | |||
+ | f1.schreibeDaten(); | ||
+ | println(); | ||
+ | f2.schreibeDaten(); | ||
+ | |||
+ | </ | ||
+ | |||
+ | <script type=" | ||
+ | abstract class Figur { | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | this.farbe = farbe; | ||
+ | } | ||
+ | |||
+ | | ||
+ | println(" | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | <script type=" | ||
+ | class Rechteck extends Figur { | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | super(farbe); | ||
+ | this.breite = breite; | ||
+ | this.höhe = höhe; | ||
+ | } | ||
+ | |||
+ | | ||
+ | super.schreibeDaten(); | ||
+ | println(" | ||
+ | println(" | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | <script type=" | ||
+ | class Kreis extends Figur { | ||
+ | | ||
+ | |||
+ | | ||
+ | super(farbe); | ||
+ | this.radius = radius; | ||
+ | } | ||
+ | |||
+ | | ||
+ | super.schreibeDaten(); | ||
+ | println(" | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Polymorphismus ==== | ||
+ | <WRAP center round info 60%> | ||
+ | Beachte die Methodenaufruf in den Zeilen 4 und 6 des Hauptprogramms oben: | ||
+ | <code learnj [enable_line_numbers=" | ||
+ | f1.schreibeDaten(); | ||
+ | println(); | ||
+ | f2.schreibeDaten(); | ||
+ | </ | ||
+ | Die Variablen '' | ||
+ | Diesen Sachverhalt nennt man **Polymorphismus** (" | ||
+ | </ | ||
+ | Noch eindrucksvoller wirkt der Polymorphismus im folgenden Beispiel: | ||
+ | |||
+ | < | ||
+ | |||
+ | <div class=" | ||
+ | |||
+ | <script type=" | ||
+ | Figur[] f = new Figur[2]; | ||
+ | f[0] = new Rechteck(" | ||
+ | f[1] = new Kreis(" | ||
+ | |||
+ | for(int i = 0; i < 2; i++){ | ||
+ | | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <script type=" | ||
+ | abstract class Figur { | ||
+ | |||
+ | | ||
+ | |||
+ | | ||
+ | this.farbe = farbe; | ||
+ | } | ||
+ | |||
+ | | ||
+ | println(" | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | <script type=" | ||
+ | class Rechteck extends Figur { | ||
+ | |||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | super(farbe); | ||
+ | this.breite = breite; | ||
+ | this.höhe = höhe; | ||
+ | } | ||
+ | |||
+ | | ||
+ | super.schreibeDaten(); | ||
+ | println(" | ||
+ | println(" | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | <script type=" | ||
+ | class Kreis extends Figur { | ||
+ | | ||
+ | |||
+ | | ||
+ | super(farbe); | ||
+ | this.radius = radius; | ||
+ | } | ||
+ | |||
+ | | ||
+ | super.schreibeDaten(); | ||
+ | println(" | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | In Zeile 6 wird beim ersten Schleifendurchlauf die Methode '' | ||
+ | <WRAP center round info 60%> | ||
+ | Am Beispiel oben wird deutlich, dass der Computer **erst zur Laufzeit** bestimmt, welche der beiden Methoden aufgerufen wird. Man spricht von **[[https:// | ||
+ | </ | ||
klassen2/polymorphismus/start.txt · Zuletzt geändert: 2024/08/31 12:03 von 127.0.0.1