ERLEDIGT
JA
JA
ANTWORTEN
3
3
ZUGRIFFE
495
495
EMPFEHLEN
-
12.10.08 20:14 #1
- Registriert seit
- Jun 2005
- Beiträge
- 2
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));
}
}
-
12.10.08 23:32 #2
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".Geändert von Kai008 (12.10.08 um 23:34 Uhr)
-
13.10.08 07:29 #3
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:
Noch wichtiger wird das ganze bei Methoden- und Konstruktorenparametern:Code java:1
List<String> foo = new ArrayList<String>();
Hier ist es dem Client freigestellt welche Implementierung von List er hier hineinreicht.Code java:1
public void doSomething(List<String foo);
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ß
OllieIn theory, there is no difference between theory and practice. In practice, there is!
www.olivergierke.de
-
13.10.08 17:42 #4
- Registriert seit
- Jun 2005
- Beiträge
- 2
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
Ähnliche Themen
-
Anfängerfehler bei PSE 7
Von Fred_noe im Forum PhotoshopAntworten: 1Letzter Beitrag: 13.02.10, 22:40 -
Wieso java.lang.StackOverflowError (minimal programm)
Von Fastkiller im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 9Letzter Beitrag: 11.04.08, 06:49 -
Anfängerfehler ?
Von Teilzeitphilosoph im Forum Flash PlattformAntworten: 0Letzter Beitrag: 12.03.08, 15:53 -
java.lang.StackOverflowError in JBoss v4.0 bei getSession()
Von cengizhdde im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 0Letzter Beitrag: 23.05.05, 20:08 -
java.lang.StackOverflowError und find den Fehler nicht
Von Romsl im Forum JavaAntworten: 6Letzter Beitrag: 30.08.04, 22:47





Zitieren
Login





