Klassenmethoden und Instanzmethoden

paco89

Bekanntes Mitglied
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:

Java:
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

Java:
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?
 
P

pappawinni

Gast
Wenn ich das richtig sehe, dann definierst du z.B. hier
Java:
    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

Bekanntes Mitglied
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:

Java:
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

Bekanntes Mitglied
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. ;)
 

Neue Themen


Oben