super() Aufruf ?

Hallo Zusammen,

das unten aufgeführte Beispiel gibt das folgende Ergebnis aus:

a: 1
b: 2
c: 3

In der Klasse B wurde super() auskommentiert. Daher habe ich mit der folgenden Ausgabe gerechnet:

a: 0
b: 0
c: 3

Was habe ich falsch verstanden ? :)

Gruß
Angelika


Code:
public class A {
	int a = 0;
	int b = 0;
 
	public A() {
		this.a = 1;
		this.b = 2;
	}
}




Code:
public class B extends A {
	int c = 0;
 
	public B(int c) {
 
		// super();
 
		System.out.println("a: " + a);
		System.out.println("b: " + b);
 
		this.c = c;
		System.out.println("c: " + c);
	}
 
	public static void main(String[] args) {
		B obj = new B(3);
	}
}
 
Der Standartkontruktor der Superclass wird immer aufgerufen, falls er vorhanden ist. Genauso wie immer ein Standartkonstruktor in einer Klasse ist, solange kein anderer existiert.
 
Hallo Kai,

danke fuer deine Antwort.

Was hat dann super() für eine Funktion ?!

Ich war der Meinung, dass man super benötigt, um den Konstruktor der Elternklasse aufzurufen.

Weiterhin war ich der Meinung, dass der Konstruktor erst aufgerufen wird, wenn ein Objekt der Klasse erzeugt wird.

Durch extends A wird kein Objekt der Klasse A erzeugt.

Gruß
Angelika
 
Hi angelikamorgan,

also dass was du sos agst stimmt nich ganz.
Wenn du eine Klasse eine andere erweitert (extends), dann ist es auch so eine.
Das heißt, class B extends A, dann ist B auch ein A.

In deiner Klasse B steht also quasi:

Java:
public class B extends A{
	int a = 0;  //Aus Klasse A
	int b = 0;  //Aus Klasse A
             int c = 0;
 
	public B(int c) {
		this.a = 1; //Automatischer Aufruf von super()
		this.b = 2; //Aus A

	             System.out.println("a: " + a);
		System.out.println("b: " + b);
 
		this.c = c;
		System.out.println("c: " + c);
                          
	}
}

Du musst dir immer merken ein Auto hat 4 Räder, wenn die Klasse Trabant die Klasse Auto erweitert (Trabant extends Auto), hat der Trabant automatisch auch die 4 Räder, denn er ist ja ein Auto!
 
Zuletzt bearbeitet:
@TheBodo: danke für die Erklärung. Das war mir nicht ganz so klar.

In deinem Beispiel werden die Variablen aus der Elternklasse A innerhalb des Konstruktors der Klasse B eingefügt.
Wird das Ganze technich genauso realisiert ?


@all: Was mir momentan unklar ist: Wann brauche ich super() ?
In welchem Fall muss ein super() Aufruf erfolgen ?

Gruß
Angelika
 
Ja, das ist der Sinn. Die erbende Klasse bekommt alle Variablen und Methoden, die nicht private sind, außer sie enthält schon eine mit dem selben Namen und Parameter. In diesen Fall spricht man von "Überschreiben", da beim Aufruf der Methode der Superclass die der Subclass aufgerufen wird.

super(); wird quasi immer aufgerufen, benötigt wird es aber nur wenn kein Standartkonstruktor existiert.

Java:
public final class SuperClass() extends Object
{
	public SuperClass(String s)
	{
		super();
	}
}
Hier wird ein eigener Konstruktor festgelegt, der Standartkonstruktor ohne Parameter existiert nun nicht mehr. Deshalb musst du in einer davon erbenden Klasse immer super() aufrufen.
 
Zurück