# getClass und getName sowie toString



## Razen (1. Feb 2010)

Ich würde die Methoden die im Titel genannt werden gerne mal in ner Demo verwenden, bhekomme aber immer nur fehler - wie kann man die denn in nem Programm verwenden um für diese get-methoden den namen der klasse und des objekts in nem string zu bekommen und wie kann man tostring überschreiben?


----------



## nrg (1. Feb 2010)

Zeig doch mal ein Stück Code, in dem du es probiert hast.


----------



## Razen (1. Feb 2010)

rofl, das wird peinlich (vermute ich )

Klasse Beispiel: 
public class Beispiel {
    public int eigenschaft1;
    public int eigenschaft2; 
}

Klasse Test:
public class Test {
    public static void main (String [] args) {
        Beispiel example = new Beispiel();

        String tester = toString( example.getClass() + " " + example.getName() )
        System.out.print(tester);
    }
}


----------



## mvitz (1. Feb 2010)

Versuch es mal so:


```
package de;

public class GetClassTest {

    public static void main(String[] args) {
        Beispiel example = new Beispiel();
        String tester = example.getClass() + " " + example.getClass().getName();
        System.out.println(tester);
    }
    
    private static class Beispiel {
        
    }

}
```


----------



## Razen (1. Feb 2010)

Ausgabe:

 Programm wird ausgeführt ...
class Beispiel Beispiel

Programm beendet


kann ich das class irgendwie wegbekommen?


----------



## mvitz (1. Feb 2010)

Klar, indem du anstelle von getClass() nur getClass().getName() verwendest.


----------



## nrg (1. Feb 2010)

???:L


```
String tester = corsa.getClass().getName();
```

edit: zu langsam


----------



## nrg (1. Feb 2010)

Razen hat gesagt.:


> wie kann man tostring überschreiben?



z.b.:

```
class Auto extends Object
//"extends Object" ist eigentlich überflüsslig, weil jede Class von Object erbt
//dient nur zur Verdeutlichung, welche toString() überschrieben wird
{
	private String hersteller;
	private String typ;
	private String version;	
	Auto(String hersteller, String typ, String version){
		this.hersteller = hersteller;
		this.typ = typ;
		this.version = version;
	}
	@Override
	public String toString(){
		return hersteller + " " + typ + " " + version;
	}
	public static void main(String[] args){
		Auto corsa = new Auto("Opel", "Corsa", "D");
		Auto vw = new Auto("VW", "Golf", "6");
		System.out.println(corsa.toString());
		System.out.println(vw.toString());
	}
}
```

edit: Ausgabe:

Opel Corsa D
VW Golf 6


----------



## mvitz (1. Feb 2010)

Anmerkung:

In dem Falle ginge dann auch einfach nur:


```
...
System.out.println(corsa);
System.out.println(vw);
```

Da intern dann corsa.toString() und vw.toString() verwendet wird.


----------



## Razen (1. Feb 2010)

wow, also support ist ja echt super hier 

eine frage - wo ich das @overried sehe,. was bedeutet @override und besonder @pure und @pre - da frag ich mich schon länger


----------



## nrg (1. Feb 2010)

@pure und @pre sind mir jetzt nicht geläufig aber im Allgemeinen les das am besten mal unter folgendem Link nach:

http://de.wikipedia.org/wiki/Annotation_(Java)

grüße

edit: speziell zu @Override und meinem Beispiel. Dem Kompiler ist die Signatur einer Methode völlig egal. Dh er kompiliert alles, was syntaktisch richtig ist.


```
public String tooString(){
		return hersteller + " " + typ + " " + version;
	}
```

damit würde ich aber die toString() von meiner Basisklasse Object nicht überschreiben! Mit der Annotation @Override sag ich dem Kompiler das die darauffolgende Methode überschrieben wird! Dh er überprüft ob die Methode in der Basisklasse vorhanden ist (anhand der Signatur)


```
@Override
	public String tooString(){
		return hersteller + " " + typ + " " + version;
	}
```
würde dann einen Kompilierfehler verursachen, weil tooString() nicht in Object implementiert ist!


----------

