OOP Polymorphie

Angelika_25

Bekanntes Mitglied
Hallo Leute, ich habe hier ein Beispiel:
Java:
class A {
        A() {
                System.out.println("Konstruktor A");
        }
};

class B extends A {
        B() {
                 System.out.println("Konstruktor B");
        }
};

public static void main(String[] args) {
        B  b1 = new B();
        A a1 = new B();
}

Wie kann ich das verstehen?
a1 ist vom Typ A, also gibt das aus:
"Konstruktor A"

Aber B wird erzeugt..... häh??


Wie kann ich das verstehen?
 

myjday

Aktives Mitglied
Hallo,

Jedes Objekt, das von einer Oberklasse erbt ist auch vom Typ der Oberklasse.
Daher ist es möglich mit einer Referenz auf ein Objekt der Oberklasse ein Objekt der
Unterklasse anzulegen.

Man nennt dies deswegen Polymorphie, da zu Beginn noch nicht feststeht, ob die Referenz auf die Basisklass irgendwann mal auf ein Objekt der Basis oder auf ein Objekt der Unterklasse verweist.

Du kannst allerdings nur für A die Methoden nutzen, die auch in der Basis definiert wurden.

Stell die vor, Du hast eine Basisklasse Tier und davon erben Hund, Katze und Maus.
Mit einer Referenz auf Tier kannst Du nun Hunde, Katzen und Mäuse anlegen.

Der Vorteil ist, dass alle vom gleichen Basisklassetyp sind und Du alle gemeinsam in einem Array verwalten kannst.

Viel Spaß noch!

Gruß,
myjday
 

Angelika_25

Bekanntes Mitglied
Also könnte ich nicht schreiben:
Java:
class A {
        A() {
                System.out.println("Konstruktor A");
        }
};
 
class B extends A {
        B() {
                 System.out.println("Konstruktor B");
        }
};
 
public static void main(String[] args) {
        B  b1 = new B();
        B c1 = new A();
}

Wie würde man den die main-Methode mit eigenen Worten ausdrücken?

Ich verstehe die Erklärung schon irgend wie, aber nicht ganz....

In dem vorhergehenden Beispiel erzeuge ich beispielsweise einen Hund, der ursprünglich von der Basisklasse Tier abstammt?
Wäre das so richtig?

Viele Grüße
 

Der Müde Joe

Top Contributor
nimm ein wenig aussagekräftigeres Beispiel:
Java:
interface Tree {
	void setColor();
}

interface FruitTree extends Tree {
	void getFruit();
}

abstract class AbstractTree implements Tree {
	@Override
	public void setColor() {
		System.out.println(this.getClass() + " COLOR");
	}
}

class Apple extends AbstractTree implements FruitTree {
	@Override
	public void getFruit() {
		System.out.println("mmmm....juicy apples");
	}
}

class ChristmasTree extends AbstractTree {// just a plain old tree...
}

class TreeTest {

	public static void main(String... _) {
		Tree[] trees = new Tree[] { new ChristmasTree(), new Apple(), new Apple() };
		for (Tree tree : trees) {
			// all we know: it is a Tree
			tree.setColor();
			if (tree instanceof FruitTree) {
				// now we know this tree has also fruits
				FruitTree ft = (FruitTree) tree;
				ft.getFruit();
			}
		}
	}
}

Alles sind Bäume. Alle Bäume kennen alles von Tree. Ein Früchtebeum kennt zusätzlich noch Früchte, aber er ist immer noch ein Baum.
 
T

Tomate_Salat

Gast
Vllt schaust du dir mal diese Kapitel (Java ist auch eine Insel) an.

Java:
public class Tier
{
	private boolean isAlive	= false;
	
	public void born()
	{
		isAlive	= true;
	}
	
	public void die()
	{
		isAlive	= false;
	}
	
	public boolean getAlive()
	{
		return isAlive;
	}
	
	public void speak()
	{
		throw new RuntimeException("I am not able to speak");
	}
	
	public static void main(String[] args)
	{
		Tier hund	= new Hund();
		Tier unknown= new Tier();
		Object obj	= new Tier();
		
		hund.speak();
		unknown.speak();
		// obj.speak(); Object kennt die Methode speak nicht!
	}
}

class Hund extends Tier
{
	@Override
	public void speak()
	{
		System.out.println("Wuff!");
	}
}

Hier ein kleines Beispiel. Tier hat die Basisfunktionen: born,die und speak. i.d.R wird jedes Tier gebohren, jedes Tier wird sterben und iwie kann sich jedes Tier verständigen. In der Hund-Klasse überschreiben wir die speak-Methode, weil ein Hund andere geräusche macht als eine Katze oder ein Flo :p.

Vererbung ist aber noch ein bisschen vielfältiger, deswegen solltest du dir den Artikel durchlesen.

MFG

Tomate_Salat
 

myjday

Aktives Mitglied
Hallo Angelika_25,

Deine Vermutung:
In dem vorhergehenden Beispiel erzeuge ich beispielsweise einen Hund, der ursprünglich von der Basisklasse Tier abstammt?
Wäre das so richtig?

Ja.

Du erzeugst eine Referenz auf ein mögliches Objekt der Klasse Tier. Das mögliche und auch angelegte Objekt ist aber kein Objekt der Basisklasse Tier sondern ein Objekt der Unterklasse Hund.

Solltest du das Buch Grundkurs Programmieren in Java Band 1 von Ratz/Scheffler/Seese/Wiesenberger zur Hand haben, dann schau mal auf Seite 305.

Es geht um einen Währungsrechner, der für jede Währung eine Klasse anlegt.
Stell dir vor, Du hast ein paar Dollar, ein paar Euro und noch irgendwo ein paar Yen.
Alle erben von der Oberklasse Währung.

Du willst wissen, wie viel Geld Du ausgedrückt in US$ besitzt. Jede Unterklasse besitzt die Methode
getUSDollar(), die den Wert der entsprechenden Währung in USDollar zurückliefert.

Deine ganzen Objekte, vom Typ Yen, vom Typ Euro und vom Typ USDollar legst du in ein Array vom Typ Währung (Umlaute natürlich ersetzen).

Um herauszufinden, wie viel Dein Vermögen in USDollar ist musst du nur Dein Array abfahren und von jedem Element die Methode getUSDollar() aufrufen, sämtliche Rückgabewerte aufaddieren und schon weisst Du wie reich Du bist.

Schönen Abend noch!

Gruß,
myjday
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
T Beispiel Polymorphie, Tier hund = new Hund(); Java Basics - Anfänger-Themen 3
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
T Polymorphie und LSP Java Basics - Anfänger-Themen 4
KogoroMori21 Polymorphie-Verständnis Java Basics - Anfänger-Themen 5
C Polymorphie-Problem Java Basics - Anfänger-Themen 3
NeoLexx Zuweisungskompatibilität zwischen Vererbungsbeziehungen (Polymorphie) Java Basics - Anfänger-Themen 18
A Polymorphie Java Basics - Anfänger-Themen 4
O Polymorphie Java Basics - Anfänger-Themen 3
J Polymorphie und Dynamisches Binden richtig nutzen Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
K Polymorphie Java Basics - Anfänger-Themen 6
C Polymorphie Was genau ist Polymorphie und wann genau sollte man es verwenden? Java Basics - Anfänger-Themen 9
C Kurze Frage zur Polymorphie Java Basics - Anfänger-Themen 1
J Polymorphie - Beispielcode Java Basics - Anfänger-Themen 7
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
T Polymorphie Java Basics - Anfänger-Themen 4
C Polymorphie - Erklärung bitte Java Basics - Anfänger-Themen 5
C Polymorphie Java Basics - Anfänger-Themen 1
L Polymorphie Polymorphie verstehen? Java Basics - Anfänger-Themen 2
H Polymorphie Verständnisproblem Vererbung/Polymorphie Java Basics - Anfänger-Themen 4
N Methoden Polymorphie Java Basics - Anfänger-Themen 11
M OOP Polymorphie/Vererbung Verständnisproblem Java Basics - Anfänger-Themen 2
E Polymorphie Beispiel Polymorphie Java Basics - Anfänger-Themen 2
K Polymorphie und instanceOf Operator Java Basics - Anfänger-Themen 6
S Vererbung Objekte in verwandten Klassen (Kovarianz, Polymorphie) Java Basics - Anfänger-Themen 4
R Polymorphie Java Basics - Anfänger-Themen 2
M Vererbung Enum Vererbung/Polymorphie Java Basics - Anfänger-Themen 2
P Polymorphie Java Basics - Anfänger-Themen 6
xehpuk Polymorphie Polymorphie in Parametern Java Basics - Anfänger-Themen 5
S Polymorphie und Vererbung Java Basics - Anfänger-Themen 6
H Kleines Problem mit der Polymorphie Java Basics - Anfänger-Themen 2
2 Interfaces, Polymorphie und Methoden. Java Basics - Anfänger-Themen 14
C OOP Frage zu Polymorphie Java Basics - Anfänger-Themen 4
P Eine Frage begzl. Interface / Polymorphie Java Basics - Anfänger-Themen 11
Y Kleine Verständnisfrage zum Thema dynamische Polymorphie Java Basics - Anfänger-Themen 3
F Verständnisfrage Objekt instanzierung / Polymorphie Java Basics - Anfänger-Themen 10
T Polymorphie:Überschreiben der Methode klappt nicht Java Basics - Anfänger-Themen 4
T Vererbung und Polymorphie Java Basics - Anfänger-Themen 7
C Unterschied zwischen Polymorphie und Typcasting Java Basics - Anfänger-Themen 10
S Polymorphie Verständnisproblem Java Basics - Anfänger-Themen 4
Z Vererbung oder Polymorphie? Java Basics - Anfänger-Themen 5
J Polymorphie Java Basics - Anfänger-Themen 6
G Polymorphie und Interface Java Basics - Anfänger-Themen 2
S Polymorphie und Vererbung Java Basics - Anfänger-Themen 25
S Polymorphie - oder auch spanisches Dorf? Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben