# Klassenmethoden und Instanzmethoden



## paco89 (3. Apr 2012)

hallo, ich hatte folgende aufgabe:

Die Klasse FeldZugriffe def. ein Klassenfeld zaehlerAlsKlassenfeld und ein Instanzfeld zaehlerAlsInstanzfeld. diese sollen in einem parameterlosen konstruktur um eins erhöht werden. zusätzlich sollte ich eine klassenmethode anzeigeKlsMeth() und eine instanzmethode anzeigeInstMeth() schreiben, welche jeweils beide feldwerte am bildschirm ausgeben.
zum testen dieser klassendefinition sollte ich zudem noch eine klasse FeldZugriffeTest erstellen, mit der ich die jeweiligen methoden aufrufe etc.



so siehts jetzt bei mir aus:


```
public class FeldZugriffe
{
	private static int zaehlerAlsKlassenfeld = 0;
	private int zaehlerAlsInstanzfeld=0;
	
	public FeldZugriffe()
	{
		this.zaehlerAlsKlassenfeld +=1;
		this.zaehlerAlsInstanzfeld +=1;
	}
	
	public static int anzeigeKlsMeth()
	{
		return 
			System.out.println(zaehlerAlsKlassenfeld);
	}
	
	public int anzeigeInstMeth()
	{
		return
			System.out.println(zaehlerAlsInstanzfeld);
	}
	
	
	
}
```


und die testklasse


```
public class FeldZugriffeTest
{
	public static void main(String [] args)
	{
		FeldZugriffe instanz = new FeldZugriffe();
		
		instanz.anzeigeInstMeth();
		
		FeldZugriffe.anzeigeKlsMeth();
	}
}
```


wenn ich die Testklasse jetzt ausführe bekomme ich folgende fehlermeldung:

FeldZugriffe.java 15 : incompatible types
found: void
required : in
                         System.out.println(zaehlerAlsKlassenfeld);

FeldZugriffe.java 21 : incompatible types
found: void
required : in
                         System.out.println(zaehlerAlsInstanzfeld);

2 errors




was ist damit gemeint? kann mir das jmd. vtl. verraten?


----------



## Final_Striker (3. Apr 2012)

Nach einem 
	
	
	
	





```
return
```
 muss eine Variable oder ein Wert stehen welchen du zurück geben willst.


----------



## pappawinni (3. Apr 2012)

Wenn ich das richtig sehe, dann definierst du z.B. hier

```
public int anzeigeInstMeth()
    {
        return
            System.out.println(zaehlerAlsInstanzfeld);
    }
```
eine Methode namens anzeigeInstMeth() vom Typ int.
Die Methode soll also eine integer zurückliefern, tut sie aber nicht.
Du musst dich halt entscheiden, ob du vielleicht 
public void anzeigeInstMeth()
definierst und also nichts zurückgeben willst (danach schaut es aus)
oder eben eine Integer zurückgeben, z.B.
return this.zaehlerAlsInstanzfeld;
Dann würden aber auch deine Methodenaufrufe nicht ganz passen.


----------



## paco89 (3. Apr 2012)

ah, okay. ich hab das problem gerade eben anders gelöst. ich habe statt "int" einfach nur "void" geschrieben und es hat funktioniert. na ja, nicht ganz. ich hatte noch einen anderen fehler den ich beheben musste. und zwar habe ich die non-static variable zaehlerAlsInstanzfeld in eine static methode reingepackt und das geht ja nicht. 
dieses problem hab ich aber auch gelöst bekommen. mein code sieht jetzt folgendermaßen aus:


```
public class FeldZugriffe
{
	private static int zaehlerAlsKlassenfeld = 0;
	private int zaehlerAlsInstanzfeld=0;
	
	public FeldZugriffe()
	{
		this.zaehlerAlsKlassenfeld +=1;
		this.zaehlerAlsInstanzfeld +=1;
	}
	
	public static void anzeigeKlsMeth()
	{
		
			System.out.println(zaehlerAlsKlassenfeld);
			FeldZugriffe t = new FeldZugriffe();
			System.out.println(t.zaehlerAlsInstanzfeld);
	}
	
	public void anzeigeInstMeth()
	{
		
			System.out.println(zaehlerAlsInstanzfeld);
			System.out.println(zaehlerAlsInstanzfeld);
	}
	
	
	
}
```


an der testklasse musste ich zum glück nichts ändern


----------



## maestr0 (4. Apr 2012)

Noch ein kleiner Hinweis für dich
Deine zweite Klass ist in dem Sinne keine Testklasse.Testklassen, insbesondere Klassen mit der Endung Test beschreiben meist JUnit-Klassen.
Da dein Programm noch nicht besonders groß ist,kannst du deine Klasse,in welche sich die Main-Methode befindet,FeldZugriffeStart oder FeldZugriffeMain oder...nennen.


----------

