OOP Konstruktoren Erklärung

Hallo,

ich habe ein paar Fragen, die ich mir selbst nicht mit dem Internet ausarbeiten kann. Zum Beispiel:

Java:
import java.lang.*;

public class Pool{
  
  double laenge;
  double breite;
  double radius;
  
  
    Pool(double l, double b)
    {
      laenge = l;
      breite = b;
    }


    Pool(double r)
    {
      radius = r;
    }

Warum braucht man den Konstruktor? ich weiß, dass er die Klasse instanziert. Verstehe aber nicht ganz was das bedeutet. Und warum sind in dem Beispiel 2 Konstruktoren?

Außerdem möchte ich wissen, warum man Konstruktoren überlädt. Zum Beispiel:

Java:
Radio(String band, int lautstaerke, int kanal){
      if(band.equals("UKW") || band.equals("MW") || band.equals("LW")){
      this.band = band;
    }
       else{
       this.band = "UKW";
       }
       
       if(kanal >= 1 && kanal <= 5)
       {
         this.kanal = kanal;
       }
       else{
         this.kanal = 1;
       }
  }
  
  Radio(String band){
    this(band, 1, 1);
  }

Was hat das für einen Sinn. Am Besten wäre eine leicht verständliche Erklärung.
 
B

bygones

Gast
Mit Konstruktoren erstellst du ein Objekt der Klasse, mit dem du dann arbeiten kannst.

Sozusagen die Eingangstuer.

Man kann mehrere Konstruktoren haben wie man mehrere Methoden mit dem selben Namen haben kann, solange sie untersch. Parameter haben. Man hat unterschiedl. Konstruktoren wenn man sein Objekt untersch. instanziieren kann bzw will.

Bei deinem Pool bsp wird einmal das objekt mit laenge und breite erstellt, einmal mit dem radius
 

langhaar!

Bekanntes Mitglied
also erstellt man mit dem Konstruktor schon das Objekt? Und warum schreibt man die Parameter sind gleich die attribute?

Ich würde es anders formulieren: Beim Erstellen eines Objektes wird ein Konstruktor aufgerufen. Du kannst auch auf einen Konstruktor verzichten.

Durch Konstruktoren kann sichergestellt werden, dass ein instanziiertes Objekt in einem konsistenten Zustand ist, indem z.B. Instanzvariablen initialisiert werden. Wenn du für dich selbst programmierst, scheint das zunächst nicht so wichtig zu sein, jedoch wenn du Klassen an andere Personen gibts oder fremde Klassen benutzt, gewinnt es an Bedeutung.

Den Satz mit den Parametern sind die Attribute verstehe ich nicht. Wer schreibt denn das?
 
@langhaar

ok nochmal für mich ganz von vorn und langsam:D

also. So wie ich es bis jetzt verstanden habe: Man hat eine Klasse (Pool). Dort werden Attribute deklariert, also Eigenschaften (laenge, breite, ...). Dann hat man Konstruktoren. Diese haben den selben Namen wie die Klasse. Man kann ihnen Parameter übergeben. Jetzt die Frage
also erstellt man mit dem Konstruktor schon das Objekt? Und warum schreibt man die Parameter sind gleich die attribute?

nochmal verständlich: Man übergibt dem Konstruktor Parameter. Und in dem Konstruktor-Block schreibt ma ja z. B. l = laenge, setzt also den Parameter 'l' gleich laenge. Warum macht man das? Was hat das für einen Sinn?
 
C

Camino

Gast
Man übergibt dem Konstruktor Parameter. Und in dem Konstruktor-Block schreibt ma ja z. B. l = laenge, setzt also den Parameter 'l' gleich laenge. Warum macht man das? Was hat das für einen Sinn?

laenge ist das zur Klasse bzw. dem Objekt gehörende Attribut. Damit weist du diesem Attribut den Wert des Parameters l zu, und das neu entstandene Objekt kann nun damit weiter arbeiten...
Das
Code:
=
heisst nicht gleich, sondern ist eine Zuweisung.
 
Zuletzt bearbeitet von einem Moderator:

Plopo

Bekanntes Mitglied
Im Grunde weist der Konstruktor nur Werte den Klassenvariablen zu, damit diese NICHT "null" sind.
Er legt sozusagen ein Grundgerüst deines Objectes an.
Das Grundgerüst enthält dann Standart Werte:
z.B.
Klasse Auto
Konstruktor legt fest farbe = "schwarz";

Ob du nun die Farbe fest in deinen Code reinschreibst, oder diese über einen Parameter übergibst (Beim erzeugen des Objektes - ist dir überlassen)

Ob du die Werte nun im nachhinein veränderst (mit "getter"-Methoden) oder nicht, ist dir überlassen.

Um es auf dein "Pool-Beispiel" anzuwenden.
Du willst ja keinen Pool bauen (new Pool()) der keine länge/breite/radius hat. Das ergäbe keinen Sinn.
Deshalb gibt es den Konstruktor. Dieser stellt sicher dass du diese Werte angeben MUSST !!! und sie nicht vergisst.
Eine nicht initialisierte Variable kann später zu einer "NullPointerException" führen welche dein Programm einer abschießt.
 
Zuletzt bearbeitet:
laenge ist das zur Klasse bzw. dem Objekt gehörende Attribut. Damit weist du diesem Attribut den Wert des Parameters l zu, und das neu entstandene Objekt kann nun damit weiter arbeiten...
Das = heisst nicht gleich, sondern ist eine Zuweisung.

Ok habe mich gerade nochmal ein wenig in Instanzvariablen eingelesen.

Man könnte praktisch auch

Java:
    Pool(double l)
    {
      laenge = l;
      breite = 30;
    }


schreiben. Also werden dort die die Instanzvariablen initialisiert. Heißt
Code:
breite = 30;
dass die Instanzvariable breite dauerhaft auf 30 gesetzt wird? und was, wenn ich noch einen Konstruktor

Java:
Pool(double b)
    {
      laenge = 30;
      breite = b;
    }

Was bedeutet es genau, wenn ich 2 Konstruktoren schreibe? Kann ich dann 2 verschiedene Instanzen erzeugen z. B. so
Java:
Pool p1 = new Pool(30)

Wenn es so ist, wie erkennt der Compiler dann, welchen Kosntruktor er nehmen soll?
 

langhaar!

Bekanntes Mitglied
Man übergibt dem Konstruktor Parameter. Und in dem Konstruktor-Block schreibt ma ja z. B. l = laenge, setzt also den Parameter 'l' gleich laenge. Warum macht man das? Was hat das für einen Sinn?

Du möchtest doch, dass dein Pool irgendwelche konkrete Werte hat.
Z.B. 10 Meter lang, 3 Meter breit.

Das muss an irgendeiner Stelle zugewiesen werden.
Wenn du ein Objekt Pool anlegst, bist du durch den Kontruktor gezwungen, diese Werte mitzugeben.

Java:
Pool meinPool = new Pool(10,3);

Falls du aber einen runden Pool hast, machen Länge und Breite keinen Sinn.
Also geht auch:

Java:
Pool meinPool = new Pool(12);

Das ergibt einen Pool, bei dem der Radius gesetzt ist.

Was bedeutet es genau, wenn ich 2 Konstruktoren schreibe? Kann ich dann 2 verschiedene Instanzen erzeugen z. B. so
Java:
Pool p1 = new Pool(30)

Wenn es so ist, wie erkennt der Compiler dann, welchen Kosntruktor er nehmen soll?

Du kannst immer mehrere Instanzen erzeugen. Du kannst mit 2 Konstruktoren die Instanzen auf verschiedene Arten erzeugen.

Konstruktoren müssen immer verschiedene Signaturen haben; d.h., die Parameter müssen sich unterscheiden. Du kannst nicht 2 Konstruktoren mit einem Double als Parameter machen, aber z.B. ein Konstruktor mit einem Double und einen weiteren mit 2 Double Parametern.
 
Zuletzt bearbeitet:
C

Camino

Gast
Die Parameterlisten der Konstruktoren müssen unterschiedlich sein, also eindeutig, damit klar ist, welchen Konstruktor du meinst. Es geht also nicht, dass du zwei Konstruktoren mit jeweils 1 double-Wert hast.
 
Die Parameterlisten der Konstruktoren müssen unterschiedlich sein, also eindeutig, damit klar ist, welchen Konstruktor du meinst. Es geht also nicht, dass du zwei Konstruktoren mit jeweils 1 double-Wert hast.

Ach ok danke. Und wenn man verschiedene Parametertypen übergibt. z. B. ein Konstruktor mit 2 int und ein Konstruktor mit einem int und einem String? Müsste ja auch gehen, da sie sich ja dann unterscheiden.


Die Instanzvariablen können also immer wieder verwendet werden und sind quasi eine Schablone für die Paramter in einem Konstruktor, es sei denn man initialisiert sie auf feste Werte wie z .B.

Java:
public class Pool{
    double laenge = 30;
    double breite = 30;
}
?

Und was passiert wenn ich einer Instanzvariable in einem Konstruktor einen festen Wert zuweise (z. B. 30)
Java:
public Pool(double l){
    breite = 30;
    laenge = l;
}

Liegt der Unterschied darin, dass im obigen Beispiel der Wert für jedes Objekt konstant ist und im Unteren der Wert nur für Objekte dieses Konstruktors konstant ist?

Und tut mir Leid, dass das hier ein wenig Anstrengend ist. Aber ich möchte es halt wirklich verstehen.
 

faetzminator

Gesperrter Benutzer
Also, stellen wir uns vor, du hast folgende Klasse:
Java:
public class Pool {

    // da diese Felder final sind, müssen sie in einen Konstruktor gesetzt werden!
    private final double laenge;
    private final double breite;

    public Pool(double l, double b) {
        laenge = l;
        breite = b;
    }

    public Pool(double l) {
        this(l, 30); // ruft Pool(double, double) auf
    }

    public Pool() {
        this(20); // ruft Pool(double) auf
    }
}
Da kannst du [c]new Pool()[/c] machen, dieser wird 20 lang und 30 breit sein.
Du kannst aber auch [c]new Pool(123)[/c] aufrufen, dann hast du einen Pool mit Länge 123 und Breite 30.
Oder schlussendlich noch [c]new Pool(1, 2)[/c], dann wird der Pool 1 lang und 2 breit sein.
 
C

Camino

Gast
Schau dir am besten nochmal die Themen Klassen- und Objektvariablen an, sowie die Sichtbarkeiten der Variablen (private, public) und die getter- und setter-Methoden (mit denen du die Variablen ändern kannst).
 

langhaar!

Bekanntes Mitglied
Die Instanzvariablen können also immer wieder verwendet werden und sind quasi eine Schablone für die Paramter in einem Konstruktor

Das mit der Wiederverwendung verstehe ich nicht.

Eine 1-1 Abbildung von Parametern in einem Kontruktor und Instanvariablen gibt es nicht; also keine Schablone.
Eine Instanzvariable beschreibt den internen Zustands eine Objekts, Instanzvariablen können - aber müssen nicht! - durch Konstruktoren initialisiert werden.
Weiterhin können Instanzvariablen ihren Zustand ändern; der ist nicht auf alle Zeiten festgeschrieben.

Ein Konstruktor kann auch andere Aufgaben durchführen, als Instanzvariablen zu initialisieren (auch wenn dies die Haupaufgabe ist)


Ich rate zu einem Buch, dass du - auch wenn nicht alles sofort klar ist- durcharbeitest, sonst hangelst du dich von Frage zu Frage ohne das Gesamtbild zu sehen.
 
Zuletzt bearbeitet:
Also, stellen wir uns vor, du hast folgende Klasse:
Java:
public class Pool {

    // da diese Felder final sind, müssen sie in einen Konstruktor gesetzt werden!
    private final double laenge;
    private final double breite;

    public Pool(double l, double b) {
        laenge = l;
        breite = b;
    }
 
    public Pool(double l) {
        this(l, 30); // ruft Pool(double, double) auf
    }

    public Pool() {
        this(20); // ruft Pool(double) auf
    }
}
Da kannst du [c]new Pool()[/c] machen, dieser wird 20 lang und 30 breit sein.
Du kannst aber auch [c]new Pool(123)[/c] aufrufen, dann hast du einen Pool mit Länge 123 und Breite 30.
Oder schlussendlich noch [c]new Pool(1, 2)[/c], dann wird der Pool 1 lang und 2 breit sein.

Ach ok da ist die Sache mit dem Überladen drin. Gutes Beispiel danke.


Naja ich werde euch dann mal nicht weiter nerven:D. Hat mir aber schonmal sehr geholfen in Sachen Verständnis. Also Danke an euch alle.
 
Ä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
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
JaZuDemNo Code Erklärung Java Basics - Anfänger-Themen 3
M Erklärung von Ausnahmebehandlung in Methoden Java Basics - Anfänger-Themen 13
S Erklärung BufferedReader und InputStreamReader Java Basics - Anfänger-Themen 4
S Erklärung zur Methode und array Java Basics - Anfänger-Themen 12
I Array in umgekehrter Reihenfolge - Erklärung - Java Basics - Anfänger-Themen 3
KogoroMori21 Erklärung zum Ternären Operator Java Basics - Anfänger-Themen 4
I Erklärung zum Java Code Java Basics - Anfänger-Themen 2
D Erklärung Java Basics - Anfänger-Themen 3
A Erklärung Programm zur Kreisberechnung Java Basics - Anfänger-Themen 43
S Bitweise Operatoren" >>>",">>","<<" erklärung Java Basics - Anfänger-Themen 5
D Erklärung eines Satzes Java Basics - Anfänger-Themen 0
M Erklärung: Int IndexOf (String s) Java Basics - Anfänger-Themen 3
C Methoden erklärung Java Basics - Anfänger-Themen 8
W FileReader - Bitte um Erklärung Java Basics - Anfänger-Themen 7
E Erste Schritte Gute Erklärung zu Objekten / Klassen / Methoden / Sichtbarkeiten auf Deutsch Java Basics - Anfänger-Themen 3
D Erklärung static boolean Java Basics - Anfänger-Themen 6
J Bitte um Erklärung Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben