• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

[JAVA] Problem: "must override a superclass method"

Scorpi

Braeburn
Registriert
05.11.06
Beiträge
47
Hallo,

ich habe ein problem was Java 6 betrifft.
Denn da ist es jetzt wohl möglich/üblich "jede" Methode mit @Override zu kennzeichnen (was auch immer das für einen Sinn hat^^)

Auf jedenfall hab ich jetzt das problem, dass ich bei mir dann zb sowas bekommen:

______________________________________________
SwingUtilities.invokeLater(new Runnable(){


@Override
public void run() {
createGUI();

}
});
_____________________________________________
The method run() of type new Runnable(){} must override a superclass method
_____________________________________________

Klar kann man da jetzt einfach das Override weglassen (dann würde es nämlich gehen)
Aber das problem ist dass ich da jetzt zum einen sehr viele Overrides löschen müsste und in zukunft wohl immer wieder auf das Problem stoßen werde (denn bei meinem WIndows rechner geht sowas :-[ und da die anderen mit denen ich an nem softwareprojekt arbeite alle nur windowsrechner haben werden sie des zeugs da wohl immer wieder reinpacken^^)

Normalerweise sollte das ja auch unter Java 6 funktionieren
und ich habe auch:
- Compiler auf Java 6 umgestellt
- JRE System Library [JVM 1.6.0] drinnen (und ne neuere für max os x 10.4 find ich nicht)

Hat jemand von euch ne Idee was ich da machen könnte?
 

arnekolja

Bismarckapfel
Registriert
25.02.08
Beiträge
141
Was hat denn das mit Windows zu tun? Die Annotationen werden doch manuell eingefügt, es sei denn man benutzt eine Entwicklungsumgebung, die sie automatisch setzt, bzw man vergisst bei Eclipse z.B. den Default-Haken weg zu machen.

"Alles nur auf @override zu trimmen" ist definitiv der falsche Weg *lach* Die Annotationen sind ein Feature, kein Zwang ;)
 

Scorpi

Braeburn
Registriert
05.11.06
Beiträge
47
hm naja gut... aber das löst trotzdem ned das problem dass es gut wäre wenn da bei mir eclipse ned dran rumnörgeln würde... denn sie wieder alle wegzusamen kann ja auch ned wirklich die einzige möglichkeit sein...
 

appahappa

Ingrid Marie
Registriert
28.03.07
Beiträge
273
Also die Sache ist ganz einfach. Mit @Override kann man Methoden kennzeichnen, die bereits in einer Superklasse implementiert werden - also wenn man Methoden überschreibt. Runnable ist aber ein Interface, d.h. du überschreibst die Methode run() gar nicht, sondern implementierst diese, deswegen bekommst du auch einen Compilefehler, wenn du deine run()-Methode mit @Override kennzeichnest.

Ach ja, fast vergessen. Auch unter Windows kannst du die run()-Methode nicht mit @Override kennzeichen, wenn du Runnable implementierst. Das hat mit Windows oder Mac gar nichts zu tun.
 
Zuletzt bearbeitet:

appahappa

Ingrid Marie
Registriert
28.03.07
Beiträge
273
Hier ein Beispiel, wann @Override benutzt werden kann (nicht muss):


public class Klasse1 {
public void meineMethode() {
//mache was schlaues
}
}

public class Klasse2 extends Klasse1 {
@Override
public void meineMethode() {
//mache was noch viel schlaueres
}
}


Man muss @Override nicht immer benutzen. Schadet aber auch nie. Ich würde @Override immer empfehlen, wenn es sich um "öffentliche"-APIs handelt, also deine Klassen jemand anders benutzt.

@Override hilft einem vor allem Fehler beim Refactoring zu vermeiden. Wenn jemand jetzt hingeht und benennt die meineMethode() in Klasse1 um wird das Klasse2 nicht mehr kompillieren. Ohne @Override-Annotation hätte man dann in Klasse2 zwei sichtbare Methoden.
 
Zuletzt bearbeitet:

Scorpi

Braeburn
Registriert
05.11.06
Beiträge
47
danke dass ihr euch solche mühe gebt... aber so ist das nicht ganz richtig... denn es gibt bei windows eben keinen compilerfehler (eben ab Java 6 nichtmehr!)! Das ist ja der witz dabei!
 

appahappa

Ingrid Marie
Registriert
28.03.07
Beiträge
273
Der Compiler von Sun und der von Apple sind fast identisch. Apple lizensiert ja den JDK von Sun und passt "nur" die ganzen UI-Libs an. Und ausserdem muss jede Java-Implementierung strenge Tests durchlaufen um sich überhaupt Java nennen zu dürfen. Daher würde es mich schon sehr wundern, wenn sich die beiden Compiler bei solch trivialen Details wie @Override unterscheiden würden.

Ich habe das ganze gerade nochmal getestet und ich bleibe dabei Suns Java6-Compiler und der Java6-Compiler von Apple verhalten sich gleich bei @Override.

ABER - man lernt bekanntich ja nie aus - muss ich zugeben, dass du zum Teil Recht hast. Ich habe das Problem gerade mit diesem kleinen Progrämmchen mal gestestet.

public class Test {

public static void main(String[] args) {

Runnable test = new Runnable() { @Override public void run() { } };

}
}

Und tatsächlich wird das Ding mit einem Java6-Compiler sauber übersetzt - und zwar sowohl unter Windows als auch auf dem Mac. Wenn ich den Java5-Compiler nehme, gibt es einen Compile-Fehler - unter Windows und auf dem Mac. Man kann also seit Version 6 auch implementierte Methoden eines Interface mit @Override kennzeichen. Dafür bedanke ich mich, hätte das sonst nicht erfahren. :) Ist ja auch eine super Sache. Wenn ich eine Methode aus einem Interface implementiere und jemand dann die Methode aus dem Interface entfernt oder umbenennt, kann es zur Laufzeit böse Fehler geben. So wird man schon beim compilieren gewarnt.

Was bedeutet das für dich? Es sieht so aus, dass du auf dem Mac mit dem Java5-Compiler versuchst zu kompilieren. Selbst wenn man Java6 auf dem Mac installiert, ist Java5 immer noch als default eingestellt. Schau mal nach welche Version angezeigt wird, wenn du "java -version" auf dem terminal aufrufst.

Wie gesagt, wenn ich bei mir auf den Java5-Compiler umschalte wird das Programm nicht übersetzt. Sowohl auf dem Mac wie unter Windows. Das wird sicherlich dein Problem sein.
 

appahappa

Ingrid Marie
Registriert
28.03.07
Beiträge
273
Ach ja, was vielleicht noch ein Problem sein könnte. Es gab ja für OS X 10.4 nur eine unfertige Vorschauversion von Java6. Kann also sein, dass dort die Änderung der Spezifikation noch nicht umgesetzt war. Ist nur eine Vermutung, kann das nicht überprüfen. Ich habe Leopard drauf, mit der aktuellen Java6-Version.
 

Scorpi

Braeburn
Registriert
05.11.06
Beiträge
47
@appahappa
genau das vermute ich leider auch dass es an eben daran liegt dass ich noch mit OS X 10.4 arbeite

naja werde ich mir wohl doch bald leopard leisten^^
oder denkt ihr dass es doch noch bald ne richtige/volle Java 6 version für os x 10.4 geben wird?
 

appahappa

Ingrid Marie
Registriert
28.03.07
Beiträge
273
Ich bin mir ziemlich sicher, dass es von Apple keine Java6-Version für 10.4 mehr kommt. Was vielleicht helfen könnte ist der Java6-Port von Landon Fuller. Er hat Java6 von FreeBSD auf Mac portiert. Da fehlen natürlich die ganzen UI-Anpassungen, die Apple gemacht hat, man benötigt z.B. X11 für UIs und alles sieht nicht so schön aus, aber zum entwickeln ist die Version allemal gut genug.

http://landonf.bikemonkey.org/static/soylatte/
 

appahappa

Ingrid Marie
Registriert
28.03.07
Beiträge
273
Soylatte ist aber nur für Intel. Dafür 32 und 64bit. Die Version von Apple gibt es nur für 64Bit-Prozessoren. Wenn du also PowerPC oder eine 32Bit Intel-CPU in deinem Mac hast, bringt dich Leopard auch nicht weiter.
 

Scorpi

Braeburn
Registriert
05.11.06
Beiträge
47
ok danke dann werde ich das glaub mal damit ausprobieren...