Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
--- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
---- Softwaretechnik (http://www.informatikerboard.de/board/board.php?boardid=18)
----- Object - Array (http://www.informatikerboard.de/board/thread.php?threadid=2737)


Geschrieben von Java_Beginner am 09.01.2016 um 20:41:

  Object - Array

Meine Frage:
Hallo zusammen,

ich frage mich die ganze Zeit, warum ich bei meinem Code immer nur die Speicheradresse ausgegeben bekomme?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
package object_test;

public class Object_Test 
{
    public static void main(String[] args) 
    {
        Object [] obj = new Object [1];
        obj[0] = new Teller (4);
        System.out.println(obj[0]);
    }
}

class Teller
{
    private int durchmesser; 
    public Teller (int durchmesser)
    {
        this.durchmesser = durchmesser; 
    }
}


Meine Ideen:
Vielen Dank für Eure Hilfe.



Geschrieben von eulerscheZahl am 10.01.2016 um 09:40:

 

Du musst in Teller die Funktion toString() überschreiben.



Geschrieben von Java_Beginner am 10.01.2016 um 10:10:

 

Vielen Dank für die Antwort.

Hier einmal mein neuer, funktionierender Code:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:

package object_test;

public class Object_Test 
{
    public static void main(String[] args) 
    {
        Object [] obj = new Object [1];
        obj[0] = new Teller (4);
        System.out.println(obj[0].toString());
    }
}

class Teller
{
    private int durchmesser; 
    public Teller (int durchmesser)
    {
        this.durchmesser = durchmesser; 
    }

    public String toString ()
    {
        return "" + durchmesser;
    }
}





Drei Fragen hätte ich dazu:

1) Wenn ich in der toString() - Methode nur return durchmesser mache bekomme ich einen Fehler (was auch logisch ist, da ich damit ja einen Integerwert zurückgeben würde). Ist es erlaubt hier einfach einen empty-String davorzusetzten?

2) Warum benötige ich in der main-Funktion noch einmal ein System.out.println() um die toString () - Methode auszugeben? Ich dachte immer, dass toString das gleich wie System.out.println() ist?

3) Woher weiß ich, wann die toString()-Funktion verwendet werden muss? Und wie genau funktioniert das mit dem Überschreiben?



Geschrieben von eulerscheZahl am 10.01.2016 um 13:18:

 

1) Java führt hier einen impliziten Cast durch: String + int = String + (String)int
besser wäre String.valueOf(durchmesser) - da ersparst du dir die Stringkonkatenation.

2) toString() gibt nur einen String zurück. Den kannst du dann je nach Lust und Laune auf die Console ausgeben, in eine Textdatei ausgeben, bei GUI in ein Label schreiben, vorlesen lassen, .... Das ist also viel flexibler.

3) du überschreibst toString() dann, wenn du eine textuelle Beschreibung der Instanz haben willst.
Da stellt sich die Frage, warum nicht eine Methode print() schreiben.
In der main geht auch einfach System.out.println(obj[0]);, der Aufruf von toString() klappt implizit. Das ist bei print() nicht der Fall.

und üblicherweise stellt man ein @Override voran, wenn man eine Methode überschreibt.



Geschrieben von Java_Beginner am 11.01.2016 um 21:49:

 

Vielen Dank für deine Hilfe :-)


Forensoftware: Burning Board, entwickelt von WoltLab GmbH