Unterschied Konstruktor und Klassenname x = new Klassenname;

Hbx8x

Aktives Mitglied
Worin besteht der Unterschied bei zb

Java:
public class Haus {

    int breite;
    int höhe
    int tiefe;

    String farbe;

    public Haus(int b, int h, int t, string f){

        breite = b;
        höhe = h;
        tiefe = t;
        farbe = f;
    }
}
Meine Idee: Hier wird die Klasse als ,,spezielle Methode" ausgeführt (Konstruktur). Das macht man um das Objekt zu initialisieren.

und dann gibt es noch z.b.

Java:
Haus Mehrfamilienhaus = new Haus;

Ist letzteres auch keine Objekterzeugung?

Theoretisch sollte es doch jetzt möglich sein sowas wie zb.

Java:
public Mehrfamilienhaus(int b, int h, int t, string f){

        breite = 20;
        höhe = 12;
        tiefe = 14;
        farbe = "Lila";
}

auszuführen.
 
Zuletzt bearbeitet von einem Moderator:
Also hier gibt es mehrere dinge, die Du durcheinander wirfst.

Es gibt mehrere Dinge, die Du trennen musst. Zum einen haben wir das erst einmal

a) Klassen
Code:
public class KlassenName {
}
Statt public kann da auch etwas anderes stehen wie z.B. protected aber auch abstract kann dort mit auftauchen. Aber darauf wollen wir erst einmal nicht eingehen.
Eine Klasse ist sowas wie ein Bauplan für spätere konkrete Objekte von dieser Klasse und beschreibt daher zum einen den Aufbau (Felder und so) und das Verhalten (Methoden)

Dann wird es ggf. notwendig, dass man bei Erstellung eines neuen Objektes etwas macht. Dazu dient dann
b) der Konstruktor.
Code:
public Klassenname() {
}
Dieser Konstruktor muss natürlich in der Klasse selbst stehen. Desweiteren kann statt public wieder etwas anderes stehen und in den Klammern können noch Parameter stehen.
Der Konstruktor ist somit eine Method mit dem Namen der Klasse ohne Rückgabetyp.

Nun wollen wir etwas machen. Dazu brauchen wir dann erst einmal
c) Variablen
Code:
EinTollerType VariablenName;
Dies definiert die Variable mit dem Namen VariablenName und dem Typ EinTollerTyp.

So eine neue Variable ist aber erst einmal null (bei Referenztypen) oder eben 0 (bei Wertetypen). Jetzt könnten wir ein neues Objekt erstellen und dazu haben wir
d) Den new Operator.
Code:
new EinKonstruktor(parameter1, parameter2);
Der new Operator gibt eine Referenz auf ein neues Objekt zurück und bekommt einen Konstruktor übergeben. Das Beispiel würde also eine Referenz auf eine neue Instanz von EinKonstruktor zurückgeben und diese Klasse EinKonstruktor muss einen Konstruktor haben der die zwei Parameter verarbeiten kann.

Somit in Deinem Beispiel:
Du hast die Klasse Haus mit einem Konstruktor. Soweit so gut. Du erstellst dann auch eine Variable Mehrfamilienhaus, aber der new Operator wird nicht korrekt verwendet. Der new Operator will nicht die Klasse sondern den Konstruktor mit notwendigen Parametern haben. Also sowas wie:
Java:
Haus Mehrfamilienhaus = new Haus(3, 4, 5, "lila");

Dein Code mit dem Mehrfamilienhaus ist da ansonsten falsch:
Wäre ja ein Konstruktor für eine Klasse Mehrfamilienhaus, aber so eine Klasse haben wir ja nicht. Wir haben ja nur eine Variable Mehrfamilienhaus.
Dann bekommt die Methode Argumente übergeben, die nicht genutzt werden. Statt dessen werden Instanzvariablen auf konstante Werte gesetzt (Aber ohne Klasse drumherum haben wir auch keine solchen Instanzvariablen!)
 

Zurück
Oben