tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
3
ZUGRIFFE
495
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Peacekeeper118 Peacekeeper118 ist offline Grünschnabel
    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));



    }


    }
     

  2. #2
    Kai008 Kai008 ist offline Mitglied Brillant
    Registriert seit
    May 2008
    Ort
    Brunn/Geb. (Niederösterreich)
    Beiträge
    944
    Blog-Einträge
    1
    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)
     

  3. #3
    Avatar von Oliver Gierke
    Oliver Gierke Oliver Gierke ist offline Mitglied Rubin
    Registriert seit
    Dec 2003
    Ort
    Mannheim
    Beiträge
    1.457
    Zitat Zitat von Kai008 Beitrag anzeigen
    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:
    Code java:
    1
    
    List<String> foo = new ArrayList<String>();
    Noch wichtiger wird das ganze bei Methoden- und Konstruktorenparametern:
    Code java:
    1
    
    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
     
    In theory, there is no difference between theory and practice. In practice, there is!

    www.olivergierke.de

  4. #4
    Peacekeeper118 Peacekeeper118 ist offline Grünschnabel
    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

  1. Anfängerfehler bei PSE 7
    Von Fred_noe im Forum Photoshop
    Antworten: 1
    Letzter Beitrag: 13.02.10, 22:40
  2. Wieso java.lang.StackOverflowError (minimal programm)
    Von Fastkiller im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 9
    Letzter Beitrag: 11.04.08, 06:49
  3. Anfängerfehler ?
    Von Teilzeitphilosoph im Forum Flash Plattform
    Antworten: 0
    Letzter Beitrag: 12.03.08, 15:53
  4. java.lang.StackOverflowError in JBoss v4.0 bei getSession()
    Von cengizhdde im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 23.05.05, 20:08
  5. Antworten: 6
    Letzter Beitrag: 30.08.04, 22:47