this() / super()

Edward

Mitglied
Hallo,

mir geht es heute um die Frage was man mit den oben genannten keywords machen kann.
Die Theorie hab ich mir durchgelesen: Man spricht damit den Konstruktor von der Superklasse bzw. der aktuellen Klasse an.
Doch was heißt das in der Praxis? Wie kann man diese Aufrufe sinnvoll Nutzen d.h. wann muss ich den Konstruktor ansprechen?
 

Joose

Top Contributor
Wenn eine Superklasse mehrere Konstruktoren hat und du einen bestimmten ansprechen willst dann verwendest du super()
this() wird verwendet um doppelten code zu vermeiden
Beispiel:
Java:
public Shoe(int id, int internalId, string name, int size, ShoeColor color, ShoeType type) {
   this(id, internalId, name, string.Empty, size, color, type);
}

public Shoe(int id, int internalId, string name, string note, int size, ShoeColor color, ShoeType type) {
   this(id, internalId, name, note, size, color.getId(), type.getId());
   this.color = color;
   this.type = type;
}

public Shoe(int id, int internalId, string name, string note, int size, int colorId, int typeId) {
   this.id = id;
   this.internalId = internalId;
   this.name = name;
   this.note = note;
   this.size = size;
   this.colorId = colorId;
   this.typeId = typeId;
}
Die ganzen Attribute werden mittels "this" nur an einen anderen Konstruktor weitergeleitet, welcher dann das setzen übernimmt.
 

Edward

Mitglied
Wenn eine Superklasse mehrere Konstruktoren hat und du einen bestimmten ansprechen willst dann verwendest du super()
this() wird verwendet um doppelten code zu vermeiden
Beispiel:
Java:
public Shoe(int id, int internalId, string name, int size, ShoeColor color, ShoeType type) {
   this(id, internalId, name, string.Empty, size, color, type);
}

public Shoe(int id, int internalId, string name, string note, int size, ShoeColor color, ShoeType type) {
   this(id, internalId, name, note, size, color.getId(), type.getId());
   this.color = color;
   this.type = type;
}

public Shoe(int id, int internalId, string name, string note, int size, int colorId, int typeId) {
   this.id = id;
   this.internalId = internalId;
   this.name = name;
   this.note = note;
   this.size = size;
   this.colorId = colorId;
   this.typeId = typeId;
}
Die ganzen Attribute werden mittels "this" nur an einen anderen Konstruktor weitergeleitet, welcher dann das setzen übernimmt.
Ich hab mal die Klasse geschrieben und versucht nachzuvollziehen was das nun bedeutet. Außer einem Compiler Fehler hab ich nichts mitgenommen.

Meine Versuche:

Code:
public class Shoe {
   
   int id;
   String color;
   
   
   public Shoe(int id, String color){
       this(id, color);
       
   }

}

Das ergibt einen Fehler
 

mrBrown

Super-Moderator
Mitarbeiter
Du versuchst dabei in dem Konstruktor Shoe(int id, String color) den Konstruktor Shoe(int id, String color) aufzurufen - das verhindert der Compiler vollkommen zurecht ;)

Das ganze macht erst Sinn, wenn du zwei oder mehr Konstruktoren hast
 

mrBrown

Super-Moderator
Mitarbeiter
Nein, er ruft aus
Shoe(int id, int internalId, string name, int size, ShoeColor color, ShoeType type)
diesen auf
Shoe(int id, int internalId, string name, string note, int size, ShoeColor color, ShoeType type)
und aus dem dann diesen
Shoe(int id, int internalId, string name, string note, int size, int colorId, int typeId).

Er ruft aus keinem Konstruktor sich selbst auf
 

Joose

Top Contributor
Aber Joose macht doch genau dasselbe nur mit größerer Anzahl.
Nein, ich rufe jeweils einen anderen Konstruktor auf.

Java:
// konstruktor 1
public Shoe(int id, int internalId, string name, int size, ShoeColor color, ShoeType type) {
   this(id, internalId, name, string.Empty, size, color, type); // ruft Konstruktor 2 auf
}
// konstruktor 2
public Shoe(int id, int internalId, string name, string note, int size, ShoeColor color, ShoeType type) {
   this(id, internalId, name, note, size, color.getId(), type.getId()); // ruft konstruktor 3 auf
   this.color = color;
   this.type = type;
}
// konstruktor 3
public Shoe(int id, int internalId, string name, string note, int size, int colorId, int typeId) {
   this.id = id;
   this.internalId = internalId;
   this.name = name;
   this.note = note;
   this.size = size;
   this.colorId = colorId;
   this.typeId = typeId;
}
Hab meinen Code nochmal durch Kommentare ergänzt. Du musst natürlich aufpassen wieviele Parameter du dem Aufruf mitgibst und von welchem Typ diese Parameter sind.
 

Edward

Mitglied
Nein, ich rufe jeweils einen anderen Konstruktor auf.

Java:
// konstruktor 1
public Shoe(int id, int internalId, string name, int size, ShoeColor color, ShoeType type) {
   this(id, internalId, name, string.Empty, size, color, type); // ruft Konstruktor 2 auf
}
// konstruktor 2
public Shoe(int id, int internalId, string name, string note, int size, ShoeColor color, ShoeType type) {
   this(id, internalId, name, note, size, color.getId(), type.getId()); // ruft konstruktor 3 auf
   this.color = color;
   this.type = type;
}
// konstruktor 3
public Shoe(int id, int internalId, string name, string note, int size, int colorId, int typeId) {
   this.id = id;
   this.internalId = internalId;
   this.name = name;
   this.note = note;
   this.size = size;
   this.colorId = colorId;
   this.typeId = typeId;
}
Hab meinen Code nochmal durch Kommentare ergänzt. Du musst natürlich aufpassen wieviele Parameter du dem Aufruf mitgibst und von welchem Typ diese Parameter sind.
Danke, die Kommentare haben es deutlich gemacht :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
mrStudent <? extends T> und <? super T> Java Basics - Anfänger-Themen 1
Say super.methode / super.variable und super(variable) Java Basics - Anfänger-Themen 2
M Super(); Java Basics - Anfänger-Themen 1
districon Super-Stichwort/ Vererbung Java Basics - Anfänger-Themen 3
N extends und super vs new object Java Basics - Anfänger-Themen 4
CptK Vererbung Attributtyp in Super-Klasse noch nicht festlegen Java Basics - Anfänger-Themen 1
B Warum können super() und this() nicht gemeinsam in einem Konstruktor verwendet werden? Java Basics - Anfänger-Themen 7
Queiser Super boolean Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B super vs. this Java Basics - Anfänger-Themen 24
M Was macht super (...)? Java Basics - Anfänger-Themen 1
E Daten dem Super Aufruf übergeben Java Basics - Anfänger-Themen 3
Henri Aufruf von getX() und getY() aus der Super klasse Objekt() Java Basics - Anfänger-Themen 3
N Frage zu this, super und return Java Basics - Anfänger-Themen 13
T super Java Basics - Anfänger-Themen 3
G funktionen der super-klasse von der super-klasse Java Basics - Anfänger-Themen 6
O Vererbung this innerhalb von super Java Basics - Anfänger-Themen 7
X Frage zu Sub/Super Klassen Java Basics - Anfänger-Themen 7
V Vererbung (wie) kann man eine 'super'-Methode auf ein Objekt anwenden ? Java Basics - Anfänger-Themen 6
E Erste Schritte <? super Unterklasse> Return-Typ darf nicht vom Wildcard-Typ sein Java Basics - Anfänger-Themen 5
E Erste Schritte Lower Bounded Wildcards <? super Integer> Java Basics - Anfänger-Themen 1
K Vererbung (super) Java Basics - Anfänger-Themen 2
C Super und Unterklassen Java Basics - Anfänger-Themen 6
Avarion Getter von Super-Klasse funktioniert nicht Java Basics - Anfänger-Themen 10
I Verständnisfrage zu BridgePattern, Verwedung von super() Java Basics - Anfänger-Themen 4
llabusch Vererbung Super Konstruktor Java Basics - Anfänger-Themen 5
Z Super einfache Frage For-Schleife im Detail Java Basics - Anfänger-Themen 3
vandread Java Wildcards - Wann super wann extends? Java Basics - Anfänger-Themen 2
A Super Klasse Java Basics - Anfänger-Themen 3
O OOP super aufruf 2 objekte? Java Basics - Anfänger-Themen 3
S super() im Konstruktor Java Basics - Anfänger-Themen 12
L Erste Schritte Super Constructor mit Array - Liste? Java Basics - Anfänger-Themen 15
A Shallow copy .super.clone() Java Basics - Anfänger-Themen 2
P Vererbung super() ohne Parameter Java Basics - Anfänger-Themen 2
D Super und Sub-Klassen Java Basics - Anfänger-Themen 2
D super.tostring Java Basics - Anfänger-Themen 8
A Super-Anweisung in abstrakter Klasse Java Basics - Anfänger-Themen 12
K Überschreiben einer "super.super"-Methode Java Basics - Anfänger-Themen 6
Luk10 super() und this Java Basics - Anfänger-Themen 7
S super() aufruf ausgabe Java Basics - Anfänger-Themen 3
L Frage zu Generics: "super" Java Basics - Anfänger-Themen 16
S super.paint() Java Basics - Anfänger-Themen 4
G Vererbung, Konstruktoranweisungen VOR super() Java Basics - Anfänger-Themen 4
G Variablen initialisieren vor super() Java Basics - Anfänger-Themen 8
H Konstruktoren – super! Java Basics - Anfänger-Themen 3
A Am Buch lesen, nun brauch ich eure Hilfe um mir super() zu erklären Java Basics - Anfänger-Themen 4
J Problem mit super Java Basics - Anfänger-Themen 10
G super operator und incompatible types, simple fehler Java Basics - Anfänger-Themen 8
kulturfenster super.paintComponent(g); Java Basics - Anfänger-Themen 3
J abstrakte klasse und methode super Java Basics - Anfänger-Themen 2
B super methode aufrufen und ergänzen? Java Basics - Anfänger-Themen 5
G Innerhalb von Runnable auf super. zugreifen? Java Basics - Anfänger-Themen 3
X this dynamisch, super statisch? Java Basics - Anfänger-Themen 3
A Frage zu super, abstracte Klassen und Kapselung Java Basics - Anfänger-Themen 3
G frage zu vererbung (super) Java Basics - Anfänger-Themen 10
G super(null) Java Basics - Anfänger-Themen 7
F Der "super" Ausdruck Java Basics - Anfänger-Themen 4
S was macht super() ? Java Basics - Anfänger-Themen 7
J Konstruktor der Oberklasse und super Java Basics - Anfänger-Themen 1
W super.methode Java Basics - Anfänger-Themen 2
G neues String Array in super() übergeben Java Basics - Anfänger-Themen 3
I call to super must be first statement in constructor Java Basics - Anfänger-Themen 3
K java syntax: wofür steht super(screen)? Java Basics - Anfänger-Themen 5
S Verwendung von Super Java Basics - Anfänger-Themen 7
P super an methode übergeben Java Basics - Anfänger-Themen 8
S supertyp steht ohne super in hierachy - eclipse Java Basics - Anfänger-Themen 4
U super-Konstruktor Aufrufen mit Object, dass Exception wirft Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben