Konstruktoren -> Funktionsaufrufe

Vintner

Mitglied
Hallo,

ich verstehe leider nicht ganz wie Funktionsaufrufe in Superkonstruktoren ablaufen.
Am besten gebe ich ein kleines Beispiel:

Java:
public class A{

   protected int x = 1;

   public A(){
      setX();
   }

   protected setX(){
      x = 2;
   }
}//class A


public class B extends A{

   private B(){ //.....

   public setX(){
      x = 3;

   public static B make(){ 
      return new B();
   }
}//class B

Beim Erstellen eines Objektes von B wird im B-Konstruktor nach Erstellen eines kompletten B-Objekts im Speicher und Initialisierung aller Objektvariablen der Super-Konstruktor (A-Konstruktor) aufgerufen.
(java.lang.object mal ausgelassen)
Wie wird im Elternkonstruktor nun auf Methoden zugegriffen?
Wird geschaut, ob in der Elternklasse die Funktion mit Zugriffsrechten von B aus vorhanden ist?
Und wenn nicht wird geschaut, ob auf die Funktion in der nächsten Kindklasse zuzugreifen ist, bis man in der letzten Kindklasse angekommen ist? Da auf diese ja stets zuzugreifen ist.

Erben mehr als 2 Klassen von einander blicke ich da leider nicht mehr ganz durch wenn ich das programmiertechnisch teste.

Kennt jemand vielleicht eine allgemeine Reihenfolge und Sichtweise wie auf Funktionen in Konstruktoren zugegriffen wird, inkl. Geheimnisprinzip?


Viele Grüße :)
 

Volvagia

Top Contributor
Es werden von der Eltern- i. d. R. niemals die Methoden der Kindklassen benutzt, nur umgekehrt. Das wäre eventuell möglich, wenn du this castest und dann darauf zugreift, aber soetwas sollte immer nur in eine Richtung funktionieren. Sonst hast du ja ein kuddelmuddel wo theoretisch Zyklen entstehen können.
 

Vintner

Mitglied
Bei folgenden zwei Beispielen gibt es halt 2 unterschiedliche Methoden die aufgerufen werden.
Ich weiß da nicht genau wie da die Regeln der Konstruktoren sind:

1:
Java:
public class X{
	public int x = 1;
	protected X(){
		f();
	}
	private void f(){
		x=2;
	}
}

public class Y extends X{
		public void f(){
		x=3;
	}
	private Y(){
		super();
	}
	public static Y make(){
		return new Y();
	}
}

public class demo {
	public static void main(String[] args){
		System.out.println("y.x = " + Y.make().x);
		//System.out.println("y.v = " + Y.make().v);
	}
}

-> x = 2

2: ( Die Methode f() wird nur auf protected gesetzt, sonst alles gleich)
Java:
public class X{
	public int x = 1;
	protected X(){
		f();
	}
	protected void f(){
		x=2;
	}
}

public class Y extends X{
		public void f(){
		x=3;
	}
	private Y(){
		super();
	}
	public static Y make(){
		return new Y();
	}
}

public class demo {
	public static void main(String[] args){
		System.out.println("y.x = " + Y.make().x);
		//System.out.println("y.v = " + Y.make().v);
	}
}


-> x = 3

Hier wird einmal die Methode der Elternklasse benutzt und einmal der Kindklasse ...
 
Zuletzt bearbeitet:

Volvagia

Top Contributor
Ich erkenne da absolut keinen Unterschied. ???:L
Aber zuerst wird der Superkonstruktor aufgerufen, das muss in jeden Konstruktor (Object mal ausgenommen) so sein.
 

Vintner

Mitglied
Jetzt bin ich wieder durcheinander gekommen, sry.

Also im Beispiel wird im Konstruktor der Elternklasse f() aufgerufen.

Ist f() in der Elternklasse private und in der Kindklasse public überschrieben wird die Funktion der Elternklasse ausgeführt.
Ist f() in der Elternklasse protected oder public wird die Kind-Funktion ausgeführt.

Beispiel oben korrigiert:
(Funktion der Kind-Klasse: x=3)
Java:
public class X{
	public int x = 1;
	protected X(){
		f();
	}
	public void f(){               // hier f() noch public
		x=2;
	}
}//X
public class Y extends X{
	public void f(){
		x=3;
	}
	private Y(){
		super();
	}
	public static Y make(){
		return new Y();
	}
}//Y

(Funktion der Elternklasse)
Java:
public class X{
	public int x = 1;
	protected X(){
		f();
	}
	private void f(){         // und hier auf private gesetzt.
		x=2;
	}
}
 

Volvagia

Top Contributor
Ach so, klar.
Private Methoden werden nicht vererbt, dadurch überschreibst du in der Kind nicht die Methode sondern legst eine vollkommen neue an.
 

Vintner

Mitglied
Dann wird also von der Kindklasse aus gesehen die f()-Methode aufgerufen.
Wird diese überschrieben kommt die Kind-Klasse zum tragen, andernfalls die der Elternklasse.
-> Immer alles aus Sicht der Kindklasse sehen :)
 

Volvagia

Top Contributor
Genau, wenn du in der Kindklasse etwas überschreibst wird von der Superklasse die neue implementation aufgerufen. Deshalb darf man niemals willkürlich Methoden überschreiben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Verschiedene Konstruktoren mit gleichen Datentypen Java Basics - Anfänger-Themen 8
C Konstruktoren und Variablen Java Basics - Anfänger-Themen 42
lougoldi Verkettung von Methoden und Konstruktoren Java Basics - Anfänger-Themen 4
J Konstruktoren und Grafik Java Basics - Anfänger-Themen 3
A Cannot find symbol mit Konstruktoren Java Basics - Anfänger-Themen 27
L Brauche Hilfe beim arbeiten mit Konstruktoren Java Basics - Anfänger-Themen 20
C Objekte und Konstruktoren Java Basics - Anfänger-Themen 2
M Methodenaufrufe im Konstruktoren Java Basics - Anfänger-Themen 31
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
M Vererbung Konstruktoren mit festen Werte Java Basics - Anfänger-Themen 2
F Mehrere Konstruktoren? Wofür? Java Basics - Anfänger-Themen 21
J Konstruktoren in Initialisierungsblöcke Java Basics - Anfänger-Themen 6
T Konstruktoren Java Basics - Anfänger-Themen 25
D was bedeutet this. bei Konstruktoren? Java Basics - Anfänger-Themen 4
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
C Die Klasse Menge mit Konstruktoren und einfachen Methoden Java Basics - Anfänger-Themen 5
F Mehrere Konstruktoren Java Basics - Anfänger-Themen 10
G Was ist der Nutzen von generischen Konstruktoren? Java Basics - Anfänger-Themen 4
Q Methoden Konstruktoren anlegen Java Basics - Anfänger-Themen 5
B Objekte in Konstruktoren übergeben Java Basics - Anfänger-Themen 5
D Zähler nicht sichtbar (Thema: Konstruktoren) Java Basics - Anfänger-Themen 2
A Überladen von Konstruktoren Java Basics - Anfänger-Themen 2
V Konstruktoren Java Basics - Anfänger-Themen 15
C Klassen StackOverflow bei erster Nutzung von Klassen/Konstruktoren Java Basics - Anfänger-Themen 9
F Konstruktoren Java Basics - Anfänger-Themen 4
M Erste Schritte Verständnis Problem Konstruktoren Java Basics - Anfänger-Themen 13
Y Klassen, Vererbung, Konstruktoren Java Basics - Anfänger-Themen 13
B Klassen Unterschied Konstruktoren. Java Basics - Anfänger-Themen 3
C Erste Schritte Konstruktoren verstehen Java Basics - Anfänger-Themen 7
W OOP Konstruktoren Erklärung Java Basics - Anfänger-Themen 14
N Abarbeitungsreihenfolge von Konstruktoren Java Basics - Anfänger-Themen 12
O Klassen und Konstruktoren Java Basics - Anfänger-Themen 7
Q Konstruktoren und Methoden Java Basics - Anfänger-Themen 2
C Konstruktoren Java Basics - Anfänger-Themen 7
J Konstruktoren Java Basics - Anfänger-Themen 10
M Konstruktoren & Veerbung Java Basics - Anfänger-Themen 6
T Konstruktoren Java Basics - Anfänger-Themen 6
P Enum Attribut in Konstruktoren Java Basics - Anfänger-Themen 10
R Vererbung Konstruktoren nicht erkannt Java Basics - Anfänger-Themen 17
H Klassen, Konstruktoren, Instanzen etc Java Basics - Anfänger-Themen 6
J OOP Konstruktoren, setMethode, getMethode usw. Java Basics - Anfänger-Themen 7
A überladene Konstruktoren Java Basics - Anfänger-Themen 7
L Frage zu Konstruktoren und dem this Operator Java Basics - Anfänger-Themen 16
W 2 Konstruktoren Java Basics - Anfänger-Themen 8
B Vererbung und Konstruktoren Java Basics - Anfänger-Themen 33
N Vererbung von Konstruktoren mit Parametern Java Basics - Anfänger-Themen 7
S Konstruktoren verketten Java Basics - Anfänger-Themen 6
A Konstruktoren sollen sich gegenseitig aufrufen Java Basics - Anfänger-Themen 10
B Konstruktoren Sichtbarkeit Java Basics - Anfänger-Themen 2
K Kann man Private-Konstruktoren doch aurufen? Java Basics - Anfänger-Themen 8
E Konstruktoren und Methoden Java Basics - Anfänger-Themen 10
E OOP individual + standard-Konstruktoren Java Basics - Anfänger-Themen 9
S Konstruktoren? Java Basics - Anfänger-Themen 5
K Konstruktoren Java Basics - Anfänger-Themen 13
H Konstruktoren – super! Java Basics - Anfänger-Themen 3
L Geschachtelte Konstruktoren Java Basics - Anfänger-Themen 4
hdi Kleine Design/Convention Frage zu Konstruktoren Java Basics - Anfänger-Themen 4
J Vererbung und Konstruktoren Java Basics - Anfänger-Themen 14
J Problem mit Konstruktoren Java Basics - Anfänger-Themen 2
G Überladen von Konstruktoren mit unterschiedlichen Datentypen Java Basics - Anfänger-Themen 4
H Befehl mit Konstruktoren Java Basics - Anfänger-Themen 2
L Konstruktoren bei Vererbung Java Basics - Anfänger-Themen 13
Z wie kann ich überladene Konstruktoren "umleiten"? Java Basics - Anfänger-Themen 11
D Blöde(?) Frage zu Konstruktoren und set-Methoden Java Basics - Anfänger-Themen 3
G Interface und Konstruktoren Java Basics - Anfänger-Themen 3
G Frage zu Konstruktoren Java Basics - Anfänger-Themen 12
G Verständnisfrage zu Konstruktoren Java Basics - Anfänger-Themen 5
G Konstruktoren Java Basics - Anfänger-Themen 9
A Konstruktoren überladen Java Basics - Anfänger-Themen 9
H Konstruktoren + Hilfe Java Basics - Anfänger-Themen 12
H Konstruktoren werden nie geerbt Java Basics - Anfänger-Themen 3
O Vor-/Nachteile/Unterschiede von Konstruktoren und Methoden Java Basics - Anfänger-Themen 3
Bierhumpen 2 Konstruktoren Java Basics - Anfänger-Themen 15
T mehrere Konstruktoren für eine Klasse Java Basics - Anfänger-Themen 7
J Instantvariablen und Konstruktoren Java Basics - Anfänger-Themen 2
Y Vererben - Konstruktoren Java Basics - Anfänger-Themen 2
Z übergabe von string[] an konstruktoren oder methoden Java Basics - Anfänger-Themen 3
L Klassen, Vererbung und Konstruktoren Java Basics - Anfänger-Themen 10
S Frage zu Konstruktoren Java Basics - Anfänger-Themen 7
G Problem mit Gültigkeit von Variabeln und Konstruktoren Java Basics - Anfänger-Themen 4
C Konstruktoren Java Basics - Anfänger-Themen 4
G Konstruktoren (was, wozu, wieso, warum) Java Basics - Anfänger-Themen 4
J Funktionsaufrufe Multiplikation von Arrays Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben