Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| programmierung:klassen:constructor [2024/08/30 14:48] – swe | programmierung:klassen:constructor [2025/12/20 14:53] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== | + | # Konstruktor |
| - | Ein Konstruktor wird benötigt, um einem Objekt einer Klasse unmittelbar bei seiner Erzeugung initiale Werte zuzuweisen. Diese Werte müssen bei der Erzeugung des Objekts natürlich irgendwie mitgegeben werden. | + | Ein Konstruktor wird benötigt, um einem Objekt einer Klasse unmittelbar |
| + | bei seiner Erzeugung initiale Werte zuzuweisen. Diese Werte müssen bei | ||
| + | der Erzeugung des Objekts natürlich irgendwie mitgegeben werden. | ||
| - | Schau dir folgendes Beispiel an. | + | Schau dir folgendes Beispiel an. |
| - | Ab Zeile 5 wird in der Klasse | + | Ab Zeile 5 wird in der Klasse |
| + | implementiert. Die Syntax ist die folgende: Der Klassen-Name (im | ||
| + | Beispiel | ||
| + | Einfach nur der Klassen-Name**. Diesem Aufruf werden **Argumente** | ||
| + | übergeben. Mit diesen Argument werden in den Zeilen 6 und 7 jeweils | ||
| + | **Klassen-Atrribute** initialisiert. Entsprechend müssen natürlich auch | ||
| + | die Datentypen bei der Übergabe an den Konstruktor mit den Datentypen | ||
| + | der Attribute übereinstimmen. Klar. | ||
| - | In der '' | + | In der `Main` wird nun in Zeile 5 ein Objekt der Klasse |
| - | <WRAP group> | + | erzeugt. Diesmal werden aber beim Aufruf gleich die Initialwert mit |
| - | <WRAP half column> | + | übergeben. Ein späteres Setzen dieser Werte ist nicht notwendig. |
| - | < | + | group\> \<WRAP half column\> |
| + | |||
| + | ``` java | ||
| class Student { | class Student { | ||
| | | ||
| Line 24: | Line 35: | ||
| } | } | ||
| } | } | ||
| - | </code> | + | ``` |
| - | </WRAP> | + | |
| + | \</WRAP\> | ||
| + | |||
| + | \< | ||
| - | <WRAP half column> | + | ``` java |
| - | < | + | |
| public class Main{ | public class Main{ | ||
| | | ||
| Line 37: | Line 50: | ||
| } | } | ||
| } | } | ||
| - | </ | + | ``` |
| - | </ | + | |
| - | </ | + | |
| - | ===== Konstruktor oder setter-Methode ===== | + | \</ |
| - | Natürlich fragst du dich jetzt, ob wir nicht im Abschnitt über getter- und setter-Methoden gelernt haben, dass wir '' | + | ## Konstruktor oder setter-Methode |
| - | Zunächst wird der Code im Zweifel | + | Natürlich fragst du dich jetzt, ob wir nicht im Abschnitt über getter- |
| + | und setter-Methoden gelernt haben, dass wir `private`-Attribute von | ||
| + | außen abkapseln. Wie passt das jetzt mit dem **Konstruktor** zusammen, | ||
| + | der ja doch wieder die Attribute einfach setzt? | ||
| - | Vielleicht ist dir ja in der Klasse '' | + | Zunächst wird der Code im Zweifel nicht so einfach wie im Beispiel sein. |
| + | Checks können natürlich auch den Konstruktor mit eingebaut | ||
| - | Kurz gesagt: Mit einem Konstruktor können wir Attribute, an die wir auch mit einer **setter-Methode** nicht herankämen **einmalig** setzen - nämlich während | + | Vielleicht ist dir ja in der Klasse `Student` das Schlüsselwort `final` |
| + | aufgefallen. Es besagt, dass ein Attribut zur Lebenszeit eines Objekt | ||
| + | unter keinen Umständen mehr geändert | ||
| + | wir sicherstellen, | ||
| + | Wert eingetragen wird. | ||
| + | Kurz gesagt: Mit einem Konstruktor können wir Attribute, an die wir auch | ||
| + | mit einer **setter-Methode** nicht herankämen **einmalig** setzen - | ||
| + | nämlich während der **Instanzierung**. Gleichzeitig kann diese Erzeugung | ||
| + | nicht passieren, ohne dass bestimmte Werte übergeben werden. | ||
| - | ^ Setter Methoden^ | + | |Setter Methoden |
| - | | Der Wert einer Variable kann sich zur Laufzeit ändern | + | |
| - | | Validierungs-Logik wird benötigt, bevor ein Wert gesetzt wird | Sicherstellen, | + | |
| - | | Werte werden nach der Initialisierung gesetzt | + | |Validierungs-Logik wird benötigt, bevor ein Wert gesetzt wird | Sicherstellen, |
| + | |Werte werden nach der Initialisierung gesetzt | ||