Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
kann mir vielleicht jemand sagen was eigendlich ein Konstruktor ist? Für was wird er benötigt? Was ist seine aufgabe?Ich hab schon viel über konstruktoren gelesen aber weit bin ich irgendwie nicht gekommen :S..Kann vielleicht jemand das an einen Beispiel zeigen?
Wenn ein Objekt erzeugt wird(also mit new Objektname()) , wird immer der Konstruktor der Klasse aufgerufen. Wenn du keinen Konstruktor in deinen Code einfügst, tut das der Compiler automatisch für dich: Er legt einen Default-Konstruktor an
Java:
public Klassenname(){}
Man kann natürlich auch selber Konstruktoren schreiben. Diese können parametrisiert und überladen werden.
Sinnvoll ist das, wenn du willst, dass deinem Objekt bei der Erstellung schon Werte angegeben werden.
Beispiel: Du hast die Klasse Auto geschrieben, welches evtl. die Instanzvariablen
int pferdestaerken;
Color farbe;
String marke;
usw. haben.
Nun schreibst du also einen Konstruktor:
Java:
public Auto(int ps, Color color, String make){
//hier setzt du diese Werte dann
this.pferdestaerken = ps;
//usw.
}
Somit hat dein Auto bei der Erstellung direkt diese Werte angenommen. Hättest du keinen eigenen Konstruktor, hätte das Auto zu Beginn 0 PS, Color = null und marke = null. (natürlich könnte der Aufrufer diese auch bei der Objekterstellung angeben...)
Ein besseres Beispiel ist mir so spontan nicht eingefallen
Der Konstruktor einer Klasse wird bei der Instantiierung eines Objekts automatisch aufgerufen. Er hat einerseits die Aufgabe, Standardaufgaben für ein Objekt abzuarbeiten, andererseits nimmt er die Argumente entgegen.
Du kannst den Konstruktor mit dem Bootvorgang deines PC vergleichen. Wenn du ihn anmachst, dann baut er sein Betriebssystem auf, an dem du dann arbeiten kannst. Der Benutzername, mit dem du dich einloggst, wäre das Argument.
Beispiel1:
Du könntest eine Klasse Auto schreiben, die die Methode bauDichZusammen(), aber keinen Konstruktor besitzt. Würdest du die Klasse nun instantiieren, würde zunächst nichts nützliches passieren, bis du jene Methode aufrufst. Damit dein Auto aber schon bei der Instantiierung fahren, lenken usw. kann, implementierst du den bauDichZusammen()-Code in den Konstruktor.
Beispiel2:
Für ein Rennspiel hast du eine Klasse Auto. Du könntest mehrere Instanzen dieser Klasse bilden, aber sie würden alle gleich aussehen, was langweilig wäre. Es sollen nun Autos mit verschiedenen Farben instantiiert werden. Also schreibst du die Klasse Auto mit einem Konstruktor, der als Argument die Farbe entgegennimmt.
Autos, die alten Lebensraumverbrenner, scheinen als Beispiel echt beliebt zu sein, eigentlich ärgerlich.
Angenommen du hast für das Rennspiel nun deine Autoklasse mit Konstruktor, inklusive Parameter- und bauDichZusammen-implementierung. Nun möchtest du, dass ein weiteres Auto in dem Spiel noch einen Anhänger hat. Du brauchst nun nicht den gesamten Kod aus der Autoklasse in die die AutoMitAnhänger-Klasse schreiben, sondern schreibst die Klasse AutoMitAnhänger so, dass sie den ganzen Kram aus Auto beinhaltet. Man sagt dann, sie erweitert Auto, realisert würde das so:
Java:
class AutoMitAnhaenger extends Auto{
...
}
Das nennt man dann Vererbung. Auto wird dann als Superklasse von AutoMitAnhänger bezeichnet und AutoMitAnhaenger erbt alle Instanzvariablen und -methoden, sowie den Konstruktor von Auto. Beim Instantiieren dieser Klasse (ohne eigenen Konstruktor) müsstest du ein Argument übergeben, weil der Konstruktor in Auto ja so geschrieben wurde und würdest zunächst ein Auto erhalten. Allerdings möchtest du ja den Anhänger mit einbauen, dieser kommt logischerweise in den eigenen Konstruktor der AutoMitAnhänger-Klasse, aber dann wird der Konstruktor von Auto nicht mehr aufgerufen. Damit dann auch der Konstruktor der Auto-Klasse ausgeführt wird, musst du folgendermaßen vorgehen:
Java:
class AutoMitAnhaenger extends Auto{
public AutoMitAnhaenger(Color farbe){
super(farbe);
//anhaenger-code
}
}
super() ruft den Konstruktor der Superklasse auf und muss immer die erste Anweisung im Konstruktor der Unterklasse sein.
Übrigens: Der Konstruktor von AutoMitAnhänger muss kein Argument übernehmen, er kann beliebig gestaltet werden,
jetzt sind mir einige sachen klarer geworden ich danke euch für eure schnelle antwort
ich versuch jetzt einige beispiele alleine zu machen und bei problemen wende ich mich nochmal an euch