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.
vielleicht ist das eine Anfängerfrage, aber ich kannte das Phänomen bis dato nicht.
Es gibt Konstruktoren und es gibt Methoden.
Aber was hat es damit auf sich wenn ein Konstruktor mit einer Methode zugleich in der Klasse definiert wird?
Hier mal der Code. Was ich meine, habe ich fett markiert.
Warum kann man nicht einfach getSubList(int start, int end) schreiben? Wozu der Konstruktor? Würde es denn ohne den Konstruktor gehen und wenn ja, was müsste dann der Rückgabe-Typ sein?:
public class AdvancedStringList extends StringList {
int advancedZahl = 5;
public AdvancedStringList(int initialSize) {
//es wird einfach der Konstruktor der Superklasse (StringList) aufgerufen
super(initialSize);
}
/*
* Gibt eine neue Instanz von StringList mit den Elementen
* von "start" bis "end" (nicht inbegriffen) zurück
*/ public AdvancedStringList getSubList(int start, int end) { //TODO ELIAS: Warum Konstruktor mit Methode?
AdvancedStringList subList = new AdvancedStringList(end - start);
for (int i = start; i < end; i++) {
subList.add(stringArray);
}
Ich verstehe deine Frage nicht. Es gibt hier einen Konstruktor und eine Methode. Die Methode gibt halt auch ein Objekt der Klasse AdvancedStringList zurück. Was genau ist jetzt die Frage?
Also das getSubList ist eine normale Funktion. Das ist kein Konstruktor.
Ein Konstruktor gibt nichts zurück, wie Du drüber gut sehen kannst.
Somit ist dies eine Funktion, die auf einer Instanz der Klasse aufgerufen werden muss/kann und die etwas zurück gibt. Da eine Instanz von der Klasse zurück gegeben werden soll, wird in der Funktion eine neue Instanz erzeugt, aber das ändert nichts an der Tatsache, dass es eine normale Funktion ist und bleibt.
Hab ich tatsächlich grad nachgesehen. Da hast du anscheinend recht, habe ich mir so noch nie drüber Gedanken gemacht. Sloppy sagt man allerdings durchaus, dass der Konstruktor ein Objekt returned.
Um Deine Frage kurz zu beantworten: das, was Du fett markiert hast, ist kein Konstruktor, sondern eine ganz gewöhnliche Methode. Der Rückgabewert ist nur vom selben Typ wie die Klasse, in der sich die Methode befindet. Ein Konstruktor ist dazu da, neue Objekte zu initialisieren.
Mal ein Beispiel: wenn Du zwei natürliche Zahlen nimmst und diese addierst, dann erhältst Du als Ergebnis wieder eine natürliche Zahl. Subtrahierst Du dagegen zwei natürliche Zahlen, erhältst Du ggf. keine natürliche Zahl mehr, sondern eine ganze Zahl.
Java:
class NatuerlicheZahl {
private int wert;
// Konstruktor für die Erzeugung natürlicher Zahlen
// Initialisiert ein neues NatuerlicheZahl-Objekt mit dem angegebenen wert.
public NatuerlicheZahl(int wert) {
if (this.wert < 0) {
throw new IllegalArgumentException(wert + " ist keine natürliche Zahl");
}
this.wert = wert;
}
// addiert summand zu this und gibt das Ergebnis zurück
// Das Ergebnis ist wieder eine NatuerlicheZahl.
public NatuerlicheZahl addiere(NatuerlicheZahl summand) {
return new NatuerlicheZahl(this.wert + summand.wert);
}
// subtrahiert subtrahend von this und gibt das Ergebnis zurück
// Das Ergebnis ist eine GanzeZahl.
public GanzeZahl subtrahiere(NatuerlicheZahl subtrahend) {
return new GanzeZahl(this.wert - subtrahend.wert);
}
}
Die Klasse GanzeZahl habe ich hier nicht dargestellt; diese würde ganz ähnlich aussehen.