Java Vererbung kleine Frage

Cygan93

Mitglied
Hallo,
ich sitze gerade vor einer Vererbungsaufgabe und weiß nicht wie ich auf die Lösung komme.
Java:
package Übungen;

public class Oberklasse {
	int zahl = 5;
	boolean ok = false;
	public Oberklasse(){
		zahl = zahl +1;
		ok = true;
	}
}
Java:
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);
		
	}

}
Java:
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.
 

Aphrim

Mitglied
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

Mitglied
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?
 

Cygan93

Mitglied
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

Mitglied
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.
 
Zuletzt bearbeitet:

Cygan93

Mitglied
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?
 

Neue Themen


Oben