Also, du hast eine Datei TelephoneList.java mit der Klasse TelephoneList und du hast eine Datei telephoneTester.java mit einer Klasse telephoneTester.
Die Klasse telephoneTester weiß nichts von der Existenz von TelephoneList. Außerdem ist entries in der Klasse TelephoneList eine Instanzvariable und die static void main Methode in telephoneTester ist statisch. Nochmals: Du benötigst eine Instanz von TelephoneList, um auf Instanzvariablen einer TelephoneList zugreifen zu können.
Ja, wobei zur Klarstellung dazugesagt werden muss, dass die Variable dort nicht entries heißen muss. Du kannst sie auch phoneList nennen und dann phoneList.add(...) aufrufen.
Ich versuche das Array mittels toStrong auszugeben, nur klappt es nicht.
public String toString() {
for (TelephoneEntry entry : entries) {
??????
}}
Was muss ich in die for schleife reinbringen, damit ich in meiner Tester Klasse die toString benutzen kann???
Die for schleife durchläuft meine ArrayList entries durch.
Die ist aber Leer, wenn ich das richtig verstehe.
Nur wie übergebe ich meine phoneList in meinen ArrayList entries????
Mit der Klasse TelephoneList definierst Du einen neuen Typ, von dem Du Instanzen (hier: Objekte) erzeugen kannst. Die Klasse gibt an, welche Attribute und welche Methoden ein solches Objekt zur Verfügung stellt.
Konkret sagst Du mir der Klasse, dass jedes TelephoneList-Objekt je ein ArrayList-Objekt besitzt, auf das mit der Variablen entries Bezug genommen wird. Außerdem besitzt jedes TelephoneList-Objekt einer add-Methode, die der ArrayList "entries" einen Entrag hinzufügt. Darüber hinaus gibt es die Methode toString(), die eine Darstellung der Einträge aus der ArrayList "entries" als Zeichenkette (String) liefert.
Um mit einem TelephoneList-Objekt arbeiten zu können, musst Du erst einmal eines erzeugen. Das machst Du in Deinem telepohoneTester (übrigens schreibt man Klassennamen in Java in UpperCamelCase):
Mit TelephoneList phoneList deklarierst Du eine Variable phoneList vom Typ TelephoneList. Mit new TelephoneList() erzeugst Du eine neue Instanz (Objekt) der Klasse TelephoneList. Durch die Zuweisung (=) an phoneList ermöglichst Du es Dir, auf das erzeugte Objekt über die Variable phoneList zuzugreifen.
Wenn Du jetzt phoneList.add("Felix", "0160555463"); aufrufst, wird die add-Methode des zuvor erzeugten TelephoneList-Objekts aufgerufen. Diese Methode erzeugt ihrerseits einen neuen Eintrag (TelephoneEntry-Objekt) und ruft anschließend die add-Methode des ArrayList-Objekts, auf das Du mit entries Bezug nimmst - mit dem Ergebnis, dass Du den erzeugten Eintrag der Liste hinzufügst.
Rufst Du davor allerdings phoneList.toString() auf, ist die Liste natürlich noch leer. Das Ergebnis steht zu diesem Zeitpunkt fest. Wann Du das Ergebnis ausgibst, spielt keine Rolle.
Ok. erstmal vielen dank für die ausführliche Erklärung. Hat wirklich geholfen.
Nur verstehe ich diese blöde toString() methode immer noch nicht. Es wird trotzdem in der konsole nicht ein String ausgegeben.
Das ist ein String, aber nicht der, den Du gerne hättest
Aktuell wird in TelephoneList#toString() für die Ausgabe eines TelephoneEntry-Objekts dessen toString()-Methode verwendet. Diese Methode ist in Klasse Object (von der alle Klassen automatisch abgeleitet sind) derart definiert, dass ein kryptischer String (Klassenname@Hash) ausgegeben wird.
Du hast jetzt zwei Möglichkeiten:
1. Du überschreibst die toString()-Methode in TelephoneEntry, so dass ein sinnvoller String zurückgegeben wird:
Java:
publicclassTelephoneEntry{...@OverridepublicStringtoString(){return name +" "+ nummer;}}
2. Du änderst die toString()-Methode in TelephoneList, so dass nicht mehr toString() sondern z. B. getName() verwendet wird.
Aber wir können ja mal mit dem einfachsten anfangen:
Java:
System.out.println("Vor Max: "+ phoneList.toString());// wir reduzieren mal auf das nötigste:System.out.println(phoneList.toString());// hier wird die Methode toString() von phoneList aufgerufen.System.out.println(phoneList);// das hier geht ebenfalls, weil println() intern auch toString() aufruft.
"Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class. "
Du gibst ja beim Methodenaufruf das Objekt an: phoneList.toString() -> es wird die toString()-Methode von phoneList verwendet. Das phoneList vom Typ TelephoneList ist, wird die dort definierte toString()-Methode aufgerufen.
Innerhalb dieses Aufrufs wird nun entry.toString() aufgerufen. Da entry vom Typ TelephoneEntry ist, wird an dieser Stelle die dort definierte toString()-Methode aufgerufen.
Wenn ich jetzt einen namen entfernen will, verwende ich eine remove() methode?
Einfach add() mit remove() verändern funktioniert nicht oder?
Zumindest klappt es bei mir nicht.