Java Anfängerfehler - StackOverflowError

Peacekeeper118

Grünschnabel
Hallo Leute!

Ich bin mit Java Programmierung noch nicht so richtig vertraut und bin auf ein eigenartiges Problem gestoßen.
Sinn der Übung war es die Bedeutung von Interfaces zu erarbeiten, leider bekomme ich aber immer einen StackOverflowError.
Könnt Ihr mir hier evtl weiterhelfen?
Die Problemstelle hab ich rot markiert.

Danke auf alle Fälle,
Michael

Interface.java:
public interface TestInterface {
public int hoehe();
public int breite();
public int laenge();
}

box.java:
public class Box
implements TestInterface{

public int laenge;
public int breite;
public int hoehe;

public int laenge() {
return this.laenge();
}
public int hoehe() {
return this.hoehe();
}
public int breite() {
return this.breite();
}


}


Main.java:
public class Main {

public static long Grundflaeche(TestInterface w){
return (long)w.laenge() * w.hoehe();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Box wuerfel = new Box();
wuerfel.breite = 1;
wuerfel.laenge = 1;
wuerfel.hoehe = 1;
System.out.print(Grundflaeche(wuerfel));



}


}
 
Interfaces sind grundsätzlich nichts anderes als abstrakte Klassen, nur dass (wenn ich mich nicht irre, kenne nur die Theorie und habe mir noch nie selbst eins geschrieben)
1) Man Interface nicht als Variablentyp verwenden kann.
2) Man mehrere Interface implementieren kann (glaube 64 oder eine andere Zweierpotenz)
3) Interface langsamer als abstrakte Klassen sind.

Ich denke der Fall ist klar, deine Methoden am Anfang der Klasse geben sich selbst zurück. Dadurch werden sie selbst aufgerufen, was zu einer Endlosschleife und der Überfüllung des Stapelspeichers führt.
Passiert mir auch manchmal, liegt wohl an der Eclipse-Autovervollständigung und dass ich das erstbeste was halbwegs richtig klingt auswähle.

Ich an deiner Stelle würde die Methoden nicht nach Variablen benennen, sondern ihr solche namen geben wie "public void getX() { return(this.x); } bzw. public void setX(int i) { this.x = i; } anstatt einfach nur "x".
 
Zuletzt bearbeitet:
Interfaces sind grundsätzlich nichts anderes als abstrakte Klassen, nur dass (wenn ich mich nicht irre, kenne nur die Theorie und habe mir noch nie selbst eins geschrieben)
1) Man Interface nicht als Variablentyp verwenden kann.
2) Man mehrere Interface implementieren kann (glaube 64 oder eine andere Zweierpotenz)
3) Interface langsamer als abstrakte Klassen sind.

Uhhh, bitte etwas mehr Sorgfalt, bevor man unrichtiges Halbwissen ins Forum pustet. Noch dazu, wenn es so elementares ist.

1) Interfaces kann man sehr wohl als Variablentypen verwenden. Vielmehr ist sorag richtig, dass man so oft wie möglich damit arbeiten sollte:
Java:
List<String> foo = new ArrayList<String>();
Noch wichtiger wird das ganze bei Methoden- und Konstruktorenparametern:
Java:
public void doSomething(List<String foo);
Hier ist es dem Client freigestellt welche Implementierung von List er hier hineinreicht.

2) Das ist halbwegs richtig. Ich weiß nicht, ob es eine genaue Anzahl überhaupt gibt. Wenn du aber eine Klasse 64 Interfaces implementieren lässt, ist irgendwas mit deinem Design faul ;).

3) Ist schon daher Blödsinn, da ein Interface nie ausgeführt wird.

4) Hat das Problem oben (wie richtig erkannt) überhaupt nichts mit dem Interface zu tun ;)

Gruß
Ollie
 
Hallo!

Ojeh ich bin so doof wie n Meter Feldweg.
Danke für die Hilfe!
Du hattest recht, die erste Option die mir NetBeans bietet is mit Klammern.
Dann kanns ja weitergehen, wohoooo ;-)

Alles Gute,
Michael
 
Zurück