# Java Vererbung kleine Frage



## Cygan93 (7. Apr 2015)

Hallo,
ich sitze gerade vor einer Vererbungsaufgabe und weiß nicht wie ich auf die Lösung komme.

```
package Übungen;

public class Oberklasse {
	int zahl = 5;
	boolean ok = false;
	public Oberklasse(){
		zahl = zahl +1;
		ok = true;
	}
}
```


```
package Übungen;

public class Unterklasse extends Oberklasse {
	public Unterklasse(){
		if (ok == true){
			zahl = zahl * 3;
		}
		System.out.println(zahl + " ");
	}
	public void tueEtwas(){
		if(ok == false){
			zahl = zahl*3;
		}
		System.out.println(zahl);
		
	}

}
```


```
package Übungen;

public class Test {
	public static void main(){
		Unterklasse uk = new Unterklasse();
		uk.tueEtwas();
		System.out.println();
	}

}
```
Zur Auswahl gibt es:
5 15
18 18
6 18
18 54

Wie gehe ich am besten bei solch einer Aufgabe vor?
Ich weiß nicht so recht wie ich anfangen soll.


----------



## Ruzmanz (7. Apr 2015)

Das ist keine Logik-Aufgabe. Du musst wissen wie der Programmfluss ausgeführt wird. Das musst du lernen.


----------



## Aphrim (7. Apr 2015)

Hallo Cygan93,

hier geht es um Polymorphie. Du musst hierfür wissen in welcher Reihenfolge die Konstruktoren der Klassen aufgerufen werden.
Google am besten mal nach Polymorphie und schau dir an wie Klassen die voneinander erben aufgerufen werden, wenn eine Instanz der Kindklasse erstellt wird.
Auf die Lösung musst du aber alleine kommen, sonst lernst du ja nichts 

LG Aphrim


----------



## Cygan93 (7. Apr 2015)

Hallo,
danke für den Tipp mit der polymorphie! Ich habe mich mal daran versucht:
1. Es wird ein neues Objekt uk aus der Unterklasse erzeugt.
2. Da uk von der Oberklasse erbt wird die zahl mit 5 und das ok mit false initialisiert.
3. Darauf wenden wir jetzt die methode tueEtwas an.
4. Da tueEtwas die if-Abfrage false hat kommt 18 hierbei raus.
So weit erstmal richtig oder habe ich schon ein Denkfehler?


----------



## consider (8. Apr 2015)

Guck dir mal an, wann und in welcher Reihenfolge Konstruktoren ausgeführt werden. Ja, du hast da einen Denkfehler


----------



## Cygan93 (8. Apr 2015)

Bei Polymorphie wird zuerst der Konstruktor der Oberklasse generiert.
Da zuerst die die Werte der Oberklasse und der Konstruktor der oberklasse generiert werden
ist die zahl = 6 und der wert = true. Danach wird der Konstruktor der Unterklasse generiert.
Da die Unterklasse erbt kommt beim System.out.print(zahl + " "); raus: 18 " ".
Oder sehe ich das falsch ;(?


----------



## consider (8. Apr 2015)

Jetzt hast du es! Und dann halt noch die Funktion.

PS. Allerdings sehe ich da jetzt keine Polymorphie sondern schlicht Vererbung. Ich denke die Aufgab ziehlt auf die Aufrufreihenfolge der Kostruktoren bei Vererbung ab.


----------



## Cygan93 (9. Apr 2015)

Bei dem Methodenaufruf uk.TueEtwas geht man zuerst die if Abfrage durch. Da ok ja auf true ist wird diese abfrage abgebrochen und es geht direkt zu System.out.print(zahl). Da die Zahl auf 18 gesetzt worden ist müsste am ende 18 18 rauskommen.
Richtig?


----------



## consider (9. Apr 2015)

Richtig.


----------

