Konstruktoren

vfbf4n1893

Mitglied
Hallo, ich bin gerade am Erlernen von Java.
Nun habe ich eine Frage zum Thema Konstruktoren:

Folgendes Beispiel: Es gibt eine Klasse GiroKonto. Diese Klasse hat als Attribute besitzer, kontonummer, bankleitzahl.
Ich soll nun einen neuen Konstruktor für diese Attribute schreiben und diesen danach aufrufen:

Die Lösung habe ich auch schon, allerdings verstehe ich nicht so ganz, wieso:
Java:
Girokonto(String b, int k, String z)
{
besitzer=b;
kontonummer=k;
bankleitzahl=z;
}

Aufruf:
Neues Objekt mach ich ja dann so:
Java:
Girokonto k1=new Girokonto("Hubert", 51234, "10004033");

Nun zu den Fragen:
Kann mir nochmal jemand genau erklären, was der Konstruktor macht. Ich habe doch in der Klasse schon die Attribute festgelegt. Wieso gehe ich jetzt im Konstruktor hin und vergebe hier neue Attribute (b, k und z). Wieso kann ich nicht mit den alten weiterarbeiten?


Der Aufruf bzw. das Erstellen eines neuen Objektes ist mir dann klar.
 
Zuletzt bearbeitet von einem Moderator:
N

nillehammer

Gast
Nun zu den Fragen:
Kann mir nochmal jemand genau erklären, was der Konstruktor macht. Ich habe doch in der Klasse schon die Attribute festgelegt. Wieso gehe ich jetzt im Konstruktor hin und vergebe hier neue Attribute (b, k und z). Wieso kann ich nicht mit den alten weiterarbeiten?
In der Klasse hast Du festgelegt, welche Attribute es gibt. Evtl auch welce default-Werte sie haben sollen. Bei dem Konstruktor mit Parametern bist Du in der Lage andere Werte für diese Attribute zuzuweisen. Du vergibst also keine neuen Attribute, sondern nur neue Werte.
 

vfbf4n1893

Mitglied
D.h. wenn ich in der Klasse schon Werte zuweise, dann brauche ich theoretisch keinen Konstruktor? (Wenn die Werte immer gleich bleiben sollen)

Also kann ich nicht außerhalb eines Konstruktors hingehen und sagen besitzer=b;
Zum ändern der Werte brauche ich also immer einen Konstruktor? Ist das richtig?

Hast du hierfür vielleicht ein anderes Beispiel wie das GiroKonto? Bzw irgend ne Seite, wo ich das nochmal nachschauen kann?

Wieso mach ich das dann überhaupt? Weil wenn ich ein neues Objekt generiere, dann muss ich ja sowieso die Werte in der Klammer angeben, wie im obigen Beispiel.
 

Michael...

Top Contributor
Also kann ich nicht außerhalb eines Konstruktors hingehen und sagen besitzer=b;
Zum ändern der Werte brauche ich also immer einen Konstruktor? Ist das richtig?
Doch wenn die Klasse entsprechende Methoden (sogn. setter-Methoden) anbietet kann man das machen. Nur kann man per Parameterübergabe im Konstruktor bestimmte Attribute gleich bei der Erzeugung der Instanzen nach Wunsch belegen.

Evtl. werden hier ein paar Deiner Fragen beantwortet:
JAVA: 6.1.4 Konstruktoren
Galileo Computing :: Java ist auch eine Insel - 5 Eigene Klassen schreiben
 

vfbf4n1893

Mitglied
Und wieso schreibe ich dann bei der Erzeugung des Objektes folgendes:
Java:
Girokonto k1=new Girokonto("Hubert", 51234, "10004033");

Hier überschreibe ich ja die Attribute des Konstrukors sowieso.
 
N

nillehammer

Gast
D.h. wenn ich in der Klasse schon Werte zuweise, dann brauche ich theoretisch keinen Konstruktor? (Wenn die Werte immer gleich bleiben sollen)
Wenn Du mit den default-Werten leben kannst, brauchst Du keinen extra Konstruktor zu schreiben. Du rufst dann einfach den sog. default-Konstruktor auf. Den gibt es immer dann, wenn Du selbst keinen Konstruktor schreibst.
Also kann ich nicht außerhalb eines Konstruktors hingehen und sagen besitzer=b;
Zum ändern der Werte brauche ich also immer einen Konstruktor? Ist das richtig?
Über einen Konstruktor setzt Du Werte bei der Erzeugung der Instanz. Wenn Du die Werte später ändern willst, machst Du das über ensprechende Methoden (sog. Setter)
Java:
public class Girokono {
  // ohne weitere Zuweisung erhält die Variable den Wert null
  String besitzer;
  // ohne weitere Zuweisung erhält die Variable den Wert 0
  int kontonummer;
   // ohne weitere Zuweisung erhält die Variable den Wert null
  String bankleitzahl;

  // Mit diesem Konstruktor setzt Du die Werte bei
  // Erzeugung auf die gewünschten Werte
  public Girokonto(String b, int k, String z) {
    besitzer=b;
    kontonummer=k;
    bankleitzahl=z;
  }

  // Mit dieser Methode kannst Du besitzer
  // nachträglich ändern.
  public void setBesitzer(String besitzer) {

   this.besitzer= besitzer;
  }

  // Mit dieser Methode kannst Du den Wert auslesen
  public String getBesitzer() {

    return besitzer;
  }
}
//... dann Benutzung ...
// Girokonto mit gewünschten Werten vorbelegen
Girokonto kto1 = new Girokonto("Heinz Müller", 12345678, "2000000");
// besitzer kontrollieren
System.out.println(kto1.getBesitzer();
// besitzer nachträglich ändern
kto1.setBesitzer("Lieschen Meier");
// besitzer kontrollieren
System.out.println(kto.getBesitzer());
 
N

nillehammer

Gast
Hier überschreibe ich ja die Attribute des Konstrukors sowieso.
Für ein besseres Verständnis hilft es, exakt zu formulieren. Du überschreibst keine Attribute. Du übergibst Werte, die im Konstruktor den enstrepchenden Attributen zugewiesen werden. Es ist doch ein Mehrwert, wenn Du die Werte gleich bei der Erzeugung mitgeben kannst oder nicht? Die Frage nach dem warum beantwortet sich dadurch.
 
B

bone2

Gast
du könntest zB auch die Bankleitzhl im Konstruktor weglassen und dem Attribut einen Standardwert geben, da eine Bank sowies immer die selbe BLZ hat.
 

vfbf4n1893

Mitglied
D.h. ohne einen Konstruktor gäbe es diese Attribute kontonummer, besitzer und bankleitzahl gar nicht? Also im Konstruktor erzeuge ich sozusagen die Attribute erst?

Falls ja, dann habe ich es kapiert :p
 

Michael...

Top Contributor
D.h. ohne einen Konstruktor gäbe es diese Attribute kontonummer, besitzer und bankleitzahl gar nicht? Also im Konstruktor erzeuge ich sozusagen die Attribute erst?

Falls ja, dann habe ich es kapiert :p
Tut mir leid Dich zu enttäuschen: Nein.
Die Parameterübergabe im Konstruktor ermöglicht es bestimmte Attribute und Eigenschaften bei der Erzeugung der Instanz festzulegen. Nicht mehr und nicht weniger.
Die Attribute müssen so oder so in der Klasse deklariert werden.
Ein Konstruktor ist eigentlich "nur" ein ganz spezielle Methode, die eben bei der Erzeugung einer Instanz aufgerufen wird.
 

Lit-Web

Aktives Mitglied
Das meiste wurde ja schon gesagt.

Also noch mal kannst Objektvariablen in deiner Klasse mit default Werten initialisieren (lies dazu mal über deklarieren, initialisieren und zuweisen).

Bei jeder Objektinstanz wird so oder so der Standardkonstruktor aufgerufen. Du kannst aber und zwar nur in dem Fall wo Objektvariablen (Eigenschaften) bei der Objektinstanz je nach Gegebenheit ihren Default Wert ändern sollen, diese im Konstruktor verändern, überschreiben oder eben initialisieren.

Der Unterschied:

Hier mal ein kleines Code Beispiel mit paar Erläuterungen.

Java:
// Beispiel 1
public class Girokonto
{
	// das ist eine Objekteigenschaft Deklaration
	protected int blz;
	
	public Girokonto (int blz)
	{
		// jetzt initialisiers du die Objekteigenschaft blz
		this.blz = blz;
	}
}

// Objektinstanz mit tatsächlichen blz Wert als Parameter
// deine Objekteigenschaft blz nimmt nun der Wert 3453123456
Girokonto gk = new Girokonto(3453123456);

// Beispiel 2
public class Girokonto
{
	// das ist eine Objekteigenschaft Initialisierung
	// du belegst also blz mit einem Default Wert 
	protected int blz = 43534543453;

	public Girokonto (int blz)
	{
		// jetzt initialisiers du die Objekteigenschaft blz und überschreibst den Defaultwert in ihr
		this.blz = blz;
	}
}

// Objektinstanz mit tatsächlichen blz Wert (durch was auch immer)
// In dem Fall nun überschreibst du deine blz Objekteigenschaft nun, weil die einen Default Wert hat
Girokonto gk = new Girokonto(3453123456);


// Beispiel mit einem Setter
public class Girokonto
{
	// das ist eine Objekteigenschaft Initialisierung
	// du belegst also blz mit einem Default Wert
	protected int blz = 43534543453;

	public setBlz (int blz)
	{
		// jetzt initialisiers du die Objekteigenschaft blz und überschreibst den Defaultwert in ihr
		this.blz = blz;
	}
}

// auch hier überschreibst du den Default Wert in Objekteigenschaft blz aber nicht mit dem Konstruktor
// sondern eine Setter Methode
// Der Standardkonstruktor wird aber trotzdem aufgerufen
Girokonto gk = new Girokonto();
gk.setBlz(3453123456);

Ich hoffe das dies nun letzte Verständnisprobleme ausradiert hat.
 
Zuletzt bearbeitet:

vfbf4n1893

Mitglied
Hätte noch ne Frage zum folgenden:

Java:
public class GiroKonto {
	
	/* Attribute */
	String besitzer;
	String kontonummer;
	int blz;
	Betrag kontostand;
	Betrag dispolimit;
	int geburtsjahr;

	/* Konstruktoren */
	GiroKonto(String b,  int g, String n) {
		besitzer = b;
		kontonummer = n;
		geburtsjahr = g;
		blz = 50080000;
		kontostand = new Betrag(0,0);
		dispolimit = new Betrag(1000,0);
	}
	
	GiroKonto(String b, int g, String n, int e, int c) {
		besitzer = b;
		kontonummer = n;
		geburtsjahr = g;
		blz = 50080000;
		kontostand = new Betrag(e,c);
		dispolimit = new Betrag(1000,0);
	}

Wieso macht man zwei Konstruktoren? einmal wird der Kontostand mit 0,0 initialisiert und einmal mit e, c. Was bringt das nun?
 

Phash

Top Contributor
Stell dir das wie eine AutoFabrik vor...

du bestellst in der Fabrik etwas:

1: ein StandardAuto. Dies hat einen StandardMotor, die StandardFarbe und die StandardAusruestung.
2: ein modifiziertesAuto. Dies hat den Motor, den der Kunde wuenscht, die Farbe, die der Kunde mag und die Ausruestung die der Kunde will.

beide Autos funktionieren.
Und in einer Werkstatt deines Vertrauens kannst du auch andere Komponenten einbauen. Du kannst im StandardAuto den Motor mit setMotor(bessererMotor) ersetzen und die Farbe mit setFarbe(tolleFarbe) aendern.
Das ist aber umstaendlich, da ja erst jemand da rumbauen muss.

Manchmal moechte man das aber, weil man viele solcher Standardautos bauen mag, die schnell und guenstig zu bauen sind (keiner muss sich ne neue Farbe ausdenken, den Motor waehlen und Ausruestung zusammenstellen)
(Die Bundeswehr bestellt z.b. 2000 mal das StandardAuto und spritzt die dann selber Olivgruen)
 
Ä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
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
V Konstruktoren -> Funktionsaufrufe 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

Ähnliche Java Themen

Neue Themen


Oben