Skip to main content

Java Polymorphie – besserer Code und mehr Möglichkeiten

Polymorphie ist das Herzstück jeder objektorientierten Sprache.
Nicht nur in Java – auch in Python, Javascript und in anderen Sprachen.

Aber was bedeutet Polymorphie eigentlich?
Polymorphie oder auch Polymorphismus genannt, kommt aus dem Griechischen.
Es bedeutet Vielgestaltigkeit.
Etwas freier übersetzt, kannst du es auch als Facettenreichtum bezeichnen.

Im Grunde genommen zielt die ganze Java Vererbung darauf ab, dass du doppelten Code vermeiden kannst.
Und dies hat dann zum Vorteil, dass du deinen Code besser warten und erweitern kannst.

Und Polymorphie setzt dem Ganzen die Krone auf.
Denn durch dieses Feature wird dein Code extrem flexibel.

Doch…
Am besten ich zeige es dir an einem Beispiel.

Java Polymorphie am Beispiel einer Figurenklasse.

Ich habe einmal drei Klassen angelegt.
Eine Superklasse namens Figur.

public class Figur {
	String farbe;//Farbe der Figur
	
	void info(){
		System.out.println("Die Figur ist "+farbe);
	}
}

Und die Unterklassen „Viereck“ und „Dreieck“ erweitern diese.

public class Viereck extends Figur{

	int laengeA;//Länge der Seite A
	int laengeB;//Länge der Seite B
	
	void berechneFlaeche(){
		System.out.println("Fläche vom Viereck");
	}
}

public class Dreieck extends Figur{

	void berechneFlaeche(){
		System.out.println("Fläche vom Dreieck");
	}
}

So kannst du dir dies grafisch vorstellen:

Java-Polymorphie-Vererbungsbeispiel

Dazu noch eine Programmstart-Klasse mit main-Methode.
In dieser habe ich bereits drei Objekte erstellt.

public class ProgrammStart {

	public static void main(String[] args) {
		Figur figurEins = new Figur(); //Figuren-Objekt
		Viereck vierEins = new Viereck();//Objekt der Klasse Viereck
		Dreieck dreiEins = new Dreieck();//Objekt der Klasse Dreieck
		
	}
}
  • Das Objekt „figurEins“ stammt aus der Superklasse.
    Somit kann die Referenzvariable auf Methoden und Variablen der Klasse „Figur“ zugreifen.
  • Die Eigenschaften und Methoden der Unterklassen „Viereck“ und „Dreieck“ stehen nicht zur Verfügung.

Hier die Punktnotation zum Figuren-Objekt:

Java Polymorphie Superklasse Zugriff

  • Das Dreieck kann mehr.
  • Es vereint die Eigenschaften und Methoden der Figurenklasse und der Dreiecksklasse.

Hier ist das Bild dazu:

Java Polymorphie Unterklassen erweitern

  • Das Viereck hat noch mehr Eigenschaften bzw. Variablen.
  • Denn auch das Viereck hat neben den Eigenschaften der Figurenklasse, ebenfalls die Eigenschaften der Vierecksklasse.

Dieses Bild macht auch dies deutlich:

Java Polymorphismus Unterklassen Beispiel

Okay…
Bis jetzt ist dies ganz normale Java Vererbung.
Polymorphie geht noch einen Schritt weiter.

Doch lass uns erst einmal einen Schritt zurück. 🙂

Schauen wir uns das Objekte-Erstellen mal näher an.

Die Erstellung des Objektes erfolgt in mehreren Schritten.

Java-Polymorphie-Objekt-anlegen

  • Es wird ein Speicherplatz reserviert.
    Die Größe entspricht dem Datentypen – Figur, Dreieck oder Viereck.
  • Der Verweis auf diesen Speicherplatz wird in einer Variable gespeichert.
    Zum Beispiel: figurEins, vierEins oder dreiEins (Siehe unser Beispiel)
  • Mit dem Konstruktoraufruf wird dann ein tatsächliches Objekt aus der Klasse Figur, Dreieck oder Viereck angelegt.

Du kannst sagen:

In unserem Beispiel zeigen somit drei Referenzvariablen – auf drei unterschiedliche Objekte im Speicher.

Java-Polymorphie-lokale-Referenzvariablen

So weit – so gut.
Jetzt erstell ich einmal ein neues Dreieck, aber nicht vom Datentyp Dreieck – sondern vom Datentyp Figur.

public class ProgrammStart {

	public static void main(String[] args) {
		Figur figurEins = new Figur(); //Figuren-Objekt
		Viereck vierEins = new Viereck();//Objekt der Klasse Viereck
		Dreieck dreiEins = new Dreieck();//Objekt der Klasse Dreieck
		
		Figur dreieckZwei = new Dreieck();//neues Dreieck vom Datentyp Figur
		
	}
}

Du siehst: Es erscheint keine Fehlermeldung.

Java Polymorphie verschiedene Datentypen

Trotz strenger Typisierung lässt es Java zu, dass du für ein Dreieck – einen fremden Datentypen – reserviert.
Die Datentypen Dreieck und Figur scheinen kompatibel zu sein.

Was steckt jetzt drin- ein Dreieck oder eine Figur?
Es handelt sich hierbei immer noch um ein vollwertiges Dreieck.

Du kannst somit ein Objekt vielfältig anbieten.
Dies ist Polymorphie.

Aber wie weit geht das Ganze?

Das Substitutionsgesetz der Java Polymorphie

Beachte…
Java ist streng typisiert.
Diese Polymorphie funktioniert nur bei höheren bzw. komplexen Datentypen, wie Objekten.
Mit einen Integer oder Boolean funktioniert das nicht.

Polymorphie Primitive Datentypen

Substitution bedeutet „Ersetzen“.
Du kannst also einen komplexen Datentyp durch einen anderen ebenfalls komplexen Datentyp ersetzen.
Aber nur bei Datentypen, welche sich in der gleichen Vererbungslinie befinden.

Das Dreieck oder das Viereck sind beides Figuren.
Sie sind somit Spezialfälle der Superklasse „Figur“.

Durch Polymorphie werden die Eigenschaften der Objekte versteckt.

Versteckt ist vielleicht nicht der richtige Ausdruck.
Viel besser ist es zu sagen:

„Die Objekte schützen ihre Eigenschaften nach außen.“

Denn jetzt ist es so, dass du nicht mehr auf die spezialisierten Eigenschaften der Dreiecksklasse zugreifen kannst.
Du kannst weder die Instanzmethoden aufrufen, noch den Instanzvariablen – Werte zuweisen.
Das Objekt verbirgt den Zugriff nach außen.

Java Polymorphie Verborgene Eigenschaften Objekte

Und die andere Richtung?

Ist es möglich eine Figur vom Datentyp Dreieck anzulegen?

Andersrum funktioniert es nicht.

Java-Polymorphie-andere-Richtung

Du kannst keine Figur anlegen, welche du dann in ein Dreieck oder Viereck steckst.
Denn lies den Code einmal von rechts nach links.
Java Polymorphie Datentypen zusammenpassen

  • Ist jedes Dreieck eine Figur? – Ja
  • Und ist jedes Viereck eine Figur? – Auch ja

Aber:

  • Ist jede Figur ein Dreieck? – Nein
  • Und ist jede Figur ein Viereck- ebenfalls nein

Java Polymorphie Datentypen unzulässig

Man kann sagen:
Es gibt neben Dreiecke noch andere Figuren.
Der Datentyp Figur ist somit viel weitreichender als ein Dreieck.
Und deshalb passt zwar ein Dreieck in den Figur-Datentypen.
Aber umgedreht funktioniert es nicht.

Formal gesagt, bedeutet Substitution:

„Du kannst ein Objekt erzeugen und diesem Objekt einen anderen Datentypen zuweisen.
Aber dieser andere Datentyp muss in der selben Vererbungslinie und mindestens eine Stufe höher, als das erzeugte Objekt sein.“

Du kannst die Zuordnung auch noch später vollziehen.

Beispielsweise so:

public class ProgrammStart {

	public static void main(String[] args) {
		Figur figurEins = new Figur(); //Figuren-Objekt
		Viereck vierEins = new Viereck();//Objekt der Klasse Viereck
		Dreieck dreiEins = new Dreieck();//Objekt der Klasse Dreieck
		
		dreiEins.farbe="Gelb";//Dreieck ist jetzt gelb
		figurEins=dreiEins;//Figur-Objekt wird zerstört. Die Ref.-Variable zeigt auf das Dreieck.
		
		figurEins.info();//Bildschirmausgabe zur Kontrolle = Gelbes Dreieck
		
	}
}

Probiere den Code einmal aus.
Aufgrund des Umswitchens der Referenzvariablen wird das Figuren-Objekt aufgegeben und zerstört.
Wenn du dann mittels Punktnotation auf die „Figuren-Referenzvariable“ zugreifst, landest du immer beim Dreieck.

Was bewirkt diese Java Polymorphie? Welchen Vorteil bringt Polymorphismus

Was müsstest du tun, wenn du alle Figuren vergrößern möchtest?
Da Java streng typisiert ist, musst du ohne Polymorphie für sämtliche Figurentypen Extra-Methoden anlegen.
Und diesen Methoden kannst du dann einen Parameter vom Typ „Dreieck“ oder „Viereck“ übergeben.

Java Polymorphie Methoden Übergabe

Sobald du neue Figurentypen in dein Programm implementierst, brauchst du neue Methoden – zum Beispiel für Kreise.
Durch die Java Polymorphie kannst du jetzt eine Methode anbieten und ihr den abstrakten Datentyp „Figur“ übergeben.
Du musst diese Methode auch nie wieder abändern. Denn der Polymorphismus bewirkt, dass später auch Kreise verarbeitet werden können.
Polymorphie Methoden Vorteile

Oder Arrays.
Ohne Polymorphie kannst du lediglich Objekte vom selben Datentypen in einem Array speichern.
Mit Polymorphie kannst du sämtliche Objekte der selben Vererbungslinie in dieses Array stecken.
Java-Polymorphie-Vorteile-Arrays

Die Vorteile von Polymorphie sind:

  • Der Code ist besser zu warten.
  • Dein Java Code ist leichter zu erweitern.
  • Die Objekte verstecken nach außen ihre Methoden und Eigenschaften.
    Dadurch werden diese besser geschützt.
  • Du bist bei der Programmierung sehr viel flexibler.

Zusammenfassung:

  • Polymorphie bewirkt, dass du ein Objekt anlegen und dabei abstraktere Datentypen verwenden kannst.
  • Dadurch erreichst du, dass dein Code besser wartbar, leichter erweiterbar und flexibler ist.
  • Die Java Polymorphie geht dabei nur in eine Richtung.
    Du kannst lediglich Datentypen verwenden, welche in der Vererbungslinie hierarchisch weiter oben stehen. (Superklassen)

Ähnliche Beiträge

So erstellst du deine ersten Java Klassen mit Eclipse

Java Klassen sind Baupläne für Java Objekte. Und da Java eine objektorientierte Programmiersprache ist, sind Java Klassen somit ein elementarer Bestandteil. In diesem Beitrag möchte ich dir zeigen, wie du eine Java Klasse in Eclipse erstellen kannst. Ich möchte dir außerdem zeigen, was physikalisch in deinem Projekt passiert. Ganz zum Schluss zeige ich dir noch, […]

Die drei Bestandteile aller Java Klassen

Java Klassen Bestandteile

Java ist eine objektorientierte Programmiersprache. Was heißt das? Ja… Anscheinend hat es etwas mit Objekten zu tun. Also was ist ein Objekt? Ein Objekt ist ein bestimmtes Konstrukt im Programm. Bauen wir ein Spiel. Ein Grafik-Adventure. Du kennst das. Ein Held wird in eine bestimmte Spielwelt hinein gesteckt. Der Held muss mit bestimmten Personen sprechen. […]

Java For Each Schleife – Aufbau und Funktionsweise

Java for each Schleife

In einer anderen Lektion habe ich dir bereits gezeigt, wie du ein Java Array mit einer for-Schleife füllen und dir später die Werte zurückgeben lassen kannst. Es gibt allerdings einen weiteren Schleifentyp, welche geradezu prädestiniert ist für Java Arrays. Dieser Schleifentyp nennt sich for each Schleife. In diesem Beitrag möchte ich dir zeigen, wie du […]

Java Duales Zahlensystem – Binäre Zahlen in Java umwandeln

Java Dual System

Das duale Zahlensystem hat viele Bezeichnungen. Oft wird auch es Dualsystem oder Binärsystem genannt. Es besteht aber immer aus 2 Zahlen. Man verwendet oft die Zahlen 0 und 1. Es können aber auch sämtliche anderen Zahlenpaare sein. Zum Beispiel 7 und 175 sind für sich genommen, auch ein normales Zahlenpaar und somit ein Dualsystem. Mit […]

Das Instanzieren von Java Klassen verhindern

Java Objekte Instanzieren verhindern

Die Instanzierung von Java Klassen verhindern. Was heißt das? Instanzen sind die Objekte einer Java Klasse. Und Instanzieren oder Instanzierung heißt nichts anderes, als Objekterstellung. Aber was soll das? Oder mal anders gefragt: Wieso sollte man verhindern, dass eine Java Klasse – Objekte erstellen kann? Schließlich sind doch Objekte der Sinn und Zweck jeder objektorientierten […]

So kannst du in Java Und Verknüpfung anlegen und auswerten

Java Und

In Java stehen dir eine Menge Operatoren zur Verfügung. Einer dieser Operatoren ist der Und-Operator. Dies ist ein logischer Operator, da dieser sogenannte Wahrheitswerte mit einander verknüpft. Also…. Was erwartet dich in diesem Beitrag? Zuerst möchte ich dir die Aussagenlogik hinter dem Und-Operator zeigen. Also wann sind Aussagen wahr und wann sind diese falsch. Dann […]

Ende vom Java Blog?

Falls du hier schon länger dabei bist, wird dir aufgefallen sein – dass kaum noch Beiträge veröffentlicht werden. Das tut mir wirklich leid und dafür möchte ich mich auch entschuldigen. Ich weiß, dass Einige unter Euch den Java-Blog wirklich lieben. Aber es ist verdammt schwierig so ein aufwendiges Thema – stilvoll, unterhaltend und methodisch umzusetzen. […]

So kannst du Java Arrays anlegen

Java Arrays anlegen

Java Arrays– Was ist das? Stell es dir einmal als ein Bücherregal vor. In einem Bücherregal befinden sich sämtliche Bücher. Und diese befinden sich schön nebeneinander. Jedes Buch hat seinen festen Platz. Du kannst die Bücher ganz genau lokalisieren. Zum Beispiel kannst du sagen. Das erste Buch von links Das dritte von rechts usw. Und […]

Lassen wir Java rechnen – Die Rechenoperationen für Variablen

Java rechnen

Ich liebe Mathe. In der Biographie „Der Mann, der die Zahlen liebte“, stellt Paul Hoffmann das Mathematikgenie Paul Erdös vor. Erdös war eines der größten Genies des 20 Jahrhunderts. Er arbeitete mit zahlreichen Wissenschaftlern zusammen und verfasste durchschnittlich mehr Publikationen im Jahr, als andere Mathematiker im ganzen Leben. Da Erdös sich mit sehr vielen Theoremen […]

So kannst du ein neues Java Projekt mit Eclipse anlegen und konfigurieren

Java Projekt anlegen Eclipse

In diesem Beitrag möchte ich dir zeigen, wie du ein neues Java Projekt mit Eclipse anlegen kannst. Ich werde dir außerdem einen kurzen Überblick über die Konfigurationsmöglichkeiten geben. Dann gebe ich dir noch eine ganz einfache Schritt-für-Schritt-Anleitung für dein allererstes Java Projekt und ich zeige dir, was nach dem Anlegen des Projektes eigentlich passiert ist.

Java Übung 25 – Simuliere eine Gelddruckmaschine

Java Übung Gelddruckmaschine

In dieser Java Übung geht es um Schleifen. Und zwar möchte ich, dass du eine virtuelle Geldruckmaschine erstellst. Was meine ich damit? Du gibst in der Konsole einen x-beliebigen Betrag ein und das Programm gibt dir virtuelle Geldscheine zurück. Ein Beispiel: Du gibst die Zahl 400 ein. Dann liefert dir das Programm 2 x 200 […]