# statischer Aufruf einer nichtstatischen Methode in der gleichen Klasse



## Mustang123 (26. Jun 2014)

Ich stehe grade vor einem ziemlichen Katze <--> Schwanz Problem


```
public class Test implements iface{
	
	public static void main(String[] args) {
		for (int i = 0; i < args.length; i ++) {
			System.out.println(berechne(args[i]));
		}
	}

	public int berechne(String number) {...} // diese Methode wird aus dem Interface überschrieben und das Interface darf nicht verändert werden
}
```

Das Interface gibt eine nichtstatische Methode "berechne(String number)", welche für jedem Eintrag im args Array ausgeführt werden soll. Allerdings brauche ich dafür eigentlich eine statische Methode, da ich aus iFace keine Instanzen erzeugen kann. Wie geht man da vor?

Ich hoffe das Problem war verständlich, ich tue mich noch etwas schwer mit der java Terminologie.


----------



## VfL_Freak (26. Jun 2014)

Mustang123 hat gesagt.:


> public int berechne(String number) {...} // diese Methode wird aus dem Interface überschrieben und das Interface darf nicht verändert werden
> }[/code]


Wie sieht denn die Deklaration im Interface aus ???:L
Eigentlich dürften dort IMHO nur statische Methoden drin sein ....

Gruß
Klaus


----------



## javampir (26. Jun 2014)

> Eigentlich dürften dort IMHO nur statische Methoden drin sein ....



naja, sie müssen ja nicht statisch sein.



> Wie sieht denn die Deklaration im Interface aus




```
public int berechne(String number);
```

die einfachste methode wäre es in main ein neues objekt Test anzulegen und dann im konstruktor den code aus der mainmethode (aber im nicht-statischen kontext) einfügen

@VfL_Freak: bitte berichtige mich, wenn ich grad volkommenen schwachsinn geschrieben habe

javampir


----------



## Mustang123 (26. Jun 2014)

Hallo, danke für die schnelle Antworten 


VfL_Freak hat gesagt.:


> Wie sieht denn die Deklaration im Interface aus ???:L
> Eigentlich dürften dort IMHO nur statische Methoden drin sein ....
> 
> Gruß
> Klaus




das Interface schaut so aus


```
public interface iFace{
	public int berechne(String zahl);
}
```
Also eine leere Methode die einfach nur implementiert wird.
Mir ist wohl klar, dass es wohl zur pädagogischen Schikane gehört, dass die Methode nicht statisch ist. Aber ich steige halt nicht durch wie ich das letzendlich in der Main Methode ausführen soll. Möglich sein muss es ja. (hoffe ich:autsch



javampir hat gesagt.:


> die einfachste methode wäre es in main ein neues objekt Test anzulegen und dann im konstruktor den code aus der mainmethode (aber im nicht-statischen kontext) einfügen



Also quasi eine neue klasse die einzig dazu dient die berechne() methode zu statifizieren (wortneuschöpfung) ?


----------



## JavaMeister (26. Jun 2014)

Was ist hier los?

Dynamisches Binden ist bei statischen Methoden nicht möglich. Daher kann ein INterface auch keine statischen Methoden vorschreiben oder implementieren.

Die Lösung hier ist trivial:

```
new Test().berechne(args[i]);
```

Feddich.

Oder habe ich was überlesen?


----------



## VfL_Freak (26. Jun 2014)

Moin,

nee nee - alles gut!
ICH habe Schwachsinn gelesen und geschrieben :bloed: (war wohl zu kurz vor den Deutschland-Spiel :bae

Natürlich dürfen Interfaces keine abstrakten Methoden haben !!

Gruß
Klaus


----------



## JavaMeister (26. Jun 2014)

> Natürlich dürfen Interfaces keine *abstrakten *Methoden haben !!



Versuche es doch einfach noch einmal ;D


----------



## Mustang123 (27. Jun 2014)

Danke, ihr habt mir den Stoß in die richtige Richtung gegeben. :toll:

Ich habe total übersehen dass das Objekt Test ja schon per "public class Test" existiert und in sich selbst aufgerufen werden kann. Ich hab die ganze Zeit überlegt ob ich da jetzt eine neue Dummy-Klasse basteln soll, die einzig dazu dient und die Methode aufrufbar zu machen. Wäre schon sehr arg sinnlos. 

Manchmal krieg ich echt zuviel von diesen rekursiven Strukturen in Java.


----------



## JavaMeister (27. Jun 2014)

Das ist der einfachste fall, der geht. Und hat nix mit Rekursionen zu tun.


----------

