16.11.2013 Aufrufe

Programmieren in Java - HostFiXX.de

Programmieren in Java - HostFiXX.de

Programmieren in Java - HostFiXX.de

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Programmieren</strong> <strong>in</strong> <strong>Java</strong><br />

1.4.1.8 Polymorphismus und B<strong>in</strong><strong>de</strong>n<br />

Polymorphismus<br />

Def<strong>in</strong>ition<br />

Polymorphismus ist die Eigenschaft von Objekten, mehreren Klassen (und nicht nur<br />

genau e<strong>in</strong>er Klasse) anzugehören, d.h. je nach Zusammenhang <strong>in</strong> unterschiedlicher<br />

Gestalt (polymorph) aufzutreten. <strong>Java</strong> ist polymorph.<br />

Bsp. 105 : Das folgen<strong>de</strong> Programm Poly ist e<strong>in</strong>e Anwendung zu <strong>de</strong>r bereits<br />

bekannten Klassenhierarchie für geometrische Objekte. Es behan<strong>de</strong>lt<br />

Ersche<strong>in</strong>ungsformen <strong>de</strong>s Polymorphismus.<br />

import java.lang.*;<br />

public class Poly extends Object<br />

{<br />

public static void ma<strong>in</strong>(Str<strong>in</strong>g args[])<br />

{<br />

Kreis k = new Kreis(0.0,1.0,2.0);<br />

Rechteck r = new Rechteck(0.0,1.0,2.0,2.0);<br />

// GeomObjekt geom = new GeomObjekt();<br />

/* unzulaessig, da GeomObjekt abstrakt ist */<br />

Object o = new Object();<br />

// Folgen<strong>de</strong> Zuweisungen s<strong>in</strong>d zulaessig<br />

GeomObjekt geom1 = k;<br />

GeomObjekt geom2 = new Kreis(1.0,1.0,1.0);<br />

GeomObjekt geom3 = r;<br />

GeomObjekt geom4 = new Rechteck(1.0,1.0,1.0,4.0);<br />

o = k;<br />

// Aufruf <strong>de</strong>r Metho<strong>de</strong>n toStr<strong>in</strong>g() und umfang()<br />

// ueber geom1<br />

System.out.pr<strong>in</strong>tln(geom1.toStr<strong>in</strong>g());<br />

System.out.pr<strong>in</strong>tln("Umfang: " + geom1.umfang());<br />

/* geom1 ist e<strong>in</strong> GeomObjekt. GeomObjekt enthaelt e<strong>in</strong>e<br />

(abstrakte) Def<strong>in</strong>ition von toStr<strong>in</strong>g() und von umfang().<br />

Zur Laufzeit ist <strong>de</strong>r Wert von geom1 e<strong>in</strong>e Referenz auf<br />

e<strong>in</strong> Objekt <strong>de</strong>r Klasse Kreis, daher wer<strong>de</strong>n die im Kreis<br />

<strong>de</strong>f<strong>in</strong>ierten (allgeme<strong>in</strong>er: die <strong>in</strong> Kreis <strong>de</strong>f<strong>in</strong>ierten<br />

bzw. ererbten) Metho<strong>de</strong>n toStr<strong>in</strong>g() und umfang() ausgefuehrt.<br />

*/<br />

// Aufruf <strong>de</strong>r Metho<strong>de</strong>n toStr<strong>in</strong>g() und umfang() ueber o<br />

// System.out.pr<strong>in</strong>tln(o.toStr<strong>in</strong>g());<br />

/* o ist e<strong>in</strong> Object. Object enthaelt e<strong>in</strong>e Def<strong>in</strong>ition von<br />

toStr<strong>in</strong>g(), daher akzeptiert <strong>de</strong>r <strong>Java</strong>-Compiler<br />

(zur Uebersetzungszeit) o.toStr<strong>in</strong>g().<br />

*/<br />

// System.out.pr<strong>in</strong>tln("Umfang: " + o.umfang());<br />

/* o ist e<strong>in</strong> Object. Object enthaelt o<strong>de</strong>r erbt ke<strong>in</strong>e<br />

Def<strong>in</strong>ition von umfang(), daher akzeptiert <strong>de</strong>r <strong>Java</strong>-<br />

Compiler (zur Uebersetzungszeit) o.umfang() nicht.<br />

*/<br />

// System.out.pr<strong>in</strong>tln("Umfang: " + (Rechteck) o.umfang());<br />

/* (Rechteck) o.umfang() akzeptiert <strong>de</strong>r <strong>Java</strong>-Compiler<br />

(zur Uebesersetzungszeit) aus <strong>de</strong>m gleichen Grund wie<br />

zuvor nicht.<br />

Die Schreibweise (Rechteck) o.umfang() be<strong>de</strong>utet auch:<br />

Der Rueckgabewert von o.umfang() soll als Rechteck-<br />

105 Vgl. pr14181<br />

88

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!