klassen2:polymorphismus:start
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
klassen2:polymorphismus:start [2020/04/30 12:19] – [Überschreiben von Methoden] Martin Pabst | klassen2:polymorphismus:start [2021/12/29 11:29] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Überschreiben von Methoden, Polymorphismus ====== | ====== Überschreiben von Methoden, Polymorphismus ====== | ||
Im folgenden Beispiel sind die Klassen '' | Im folgenden Beispiel sind die Klassen '' | ||
- | < | + | < |
abstract class Figur { | abstract class Figur { | ||
Zeile 26: | Zeile 26: | ||
</ | </ | ||
- | < | + | < |
class Rechteck extends Figur { | class Rechteck extends Figur { | ||
Zeile 46: | Zeile 46: | ||
</ | </ | ||
- | Wird nun bei einem '' | + | Wird nun bei einem '' |
< | < | ||
- | <div class=" | + | <div class=" |
<script type=" | <script type=" | ||
- | Figur r = new Rechteck(" | + | Figur f1 = new Rechteck(" |
- | Figur k = new Kreis(" | + | Figur f2 = new Kreis(" |
- | r.schreibeDaten(); | + | f1.schreibeDaten(); |
println(); | println(); | ||
- | k.schreibeDaten(); | + | f2.schreibeDaten(); |
</ | </ | ||
Zeile 113: | Zeile 113: | ||
} | } | ||
</ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== 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.1588241951.txt.gz · Zuletzt geändert: 2021/12/29 11:29 (Externe Bearbeitung)