# @override



## .maik. (22. Feb 2011)

Abend. 
Ich brauche dringend eure Hilfe. Ich muss mich bis morgen im Bereich SWING/AWT auskennen. Ich gucke mir momentan die kapitel auf insel dazu an . nun wird häufiger, wie hier : 

```
import java.awt.event.*; 
import javax.swing.*; 
 
public class CloseWindowWithAdapter 
{ 
  public static void main( String[] args ) 
  { 
    JFrame f = new JFrame(); 
    f.setSize( 400, 400 ); 
    f.setVisible( true ); 
 
    f.addWindowListener( new CloseWindowAction() ); 
  } 
} 
 
class CloseWindowAction extends WindowAdapter 
{ 
  @Override 
  public void windowClosing( WindowEvent e ) { System.exit(0); } 
}
```

@override benutzt. habs auch schon gegooglelt, aber leider nichts passendes gefunden . kann mir da jemand bitte erklären was das ist. 

danke danke

lg


----------



## DerEisteeTrinker (22. Feb 2011)

die annotation gibt an, dass die methode aus der super-klasse überschrieben wird


----------



## .maik. (22. Feb 2011)

ist das denn wirklich notwendig. ich meine wenn die methode die selbe signatur besitzt, wird die spuerklassen methode doch automatisch überschireben .

lg

danke für die schnelle antwort


----------



## DerEisteeTrinker (22. Feb 2011)

Gute Frage, ob es notwendig ist. Da ich mit Eclipse arbeite, schreibt es die IDE einfach hin und es macht die Anwendung weder schneller noch langsamer, also lasse ich es stehen.


----------



## XHelp (22. Feb 2011)

Der Sinn dabei ist: du sagst im Klartext "ja, ich will es wirklich überschreiben und ich habe nicht aus Versehen die Methode genau so genannt"


----------



## .maik. (22. Feb 2011)

ja ok danke. aber in diesem beispiel hier: (sorry wegen soviel Code)

```
import java.awt.event.*; 
import javax.swing.*; 
 
public class CloseWindowWithInnerClass extends JFrame 
{ 
  public CloseWindowWithInnerClass() 
  { 
    setSize( 400, 400 ); 
 
    addWindowListener( new WindowAdapter() { 
      @Override public void windowClosing( WindowEvent e ) { 
        System.exit( 0 ); 
      } 
    } ); 
  } 
 
  public static void main( String[] args ) 
  { 
    new CloseWindowWithInnerClass().setVisible( true ); 
  } 
}
```

verstehe ich nicht recht wie es funktioniert, dass die windowClosing Methode überschreiben wird. habe ich es richtig verstanden , dass man hinter dem konstruktor mit den {} Klammern Methoden überschireben kann. ist das die kurform dafür?


----------



## Haave (22. Feb 2011)

.maik. hat gesagt.:


> ist das denn wirklich notwendig. ich meine wenn die methode die selbe signatur besitzt, wird die spuerklassen methode doch automatisch überschireben .


Zwingend notwendig ist die @Override-Annotation nicht, aber mir ist z.B. ein Fall bekannt, in dem sie helfen kann, Fehler zu vermeiden:

Stell dir vor, du hast eine Klasse A und eine Klasse B, die von A abgeleitet ist. Klasse A hat eine Methode foo(), B überschreibt diese Methode. Also so:

```
class A {
	void foo() {
		//irgendwas
	}
}

class B extends A {
	@Override
	void foo() {
		//irgendwas anderes, Klasse-B-Spezifisches
	}
}
```

Solltest du nun auf die Idee kommen, in der Oberklasse die Methode foo() aus irgendeinem Grund zu entfernen, wirst du vom Compiler eine Fehlermeldung erhalten, dass B eine Methode überschreiben will, die es gar nicht gibt.
Ohne die @Override-Annotation hingegen würde nach Entfernen von foo() aus A die Klasse B ganz normal eine Methode foo() haben, von der man nicht mehr wüsste, dass sie mal eine andere Methode überschreiben sollte.


----------



## XHelp (22. Feb 2011)

Das sind anonymen Klassen: Galileo Computing :: Java ist auch eine Insel – 8 Äußere.innere Klassen
Als "Kurzform" würde ich das aber nicht bezeichnen.


----------



## DerEisteeTrinker (22. Feb 2011)

WindowAdapter ist eine abstrakte Klasse von der du eigentlich keine Instanz anlegen kannst. Diese abstrakte Klasse definiert, dass windowClosing() implementiert werden muss, deswegen halt zwingend das override. Mit dieser "Kurzform" legst du eine Instanz einer Klasse vom Typ WindowAdapter.


----------



## Cola_Colin (22. Feb 2011)

.maik. hat gesagt.:


> ja ok danke. aber in diesem beispiel hier: (sorry wegen soviel Code)
> 
> ```
> import java.awt.event.*;
> ...



Das ist eine anonyme Klasse.

EDIT: Och ich bin ja soooo langsam :autsch:


----------



## .maik. (22. Feb 2011)

danke. danke. danke. 
habt mir echt geholfen


----------



## .maik. (22. Feb 2011)

eine Frage wäre da noch: Wenn ich ein IconImage Objekt erzeuge, wie muss ich mir das vorstellen. Enthält das Objekt dann die Informationen, wie das Bild gemalt wird und beim aufruf von frame.setVisible(true) werden diese Informationen dann genutzt?


----------



## XHelp (22. Feb 2011)

Die Frage passt ja gut in das Thema...
ImageIcon (Java Platform SE 6) hier steht was die Klasse macht.


----------



## .maik. (22. Feb 2011)

hatte es mir da schon durchgelsen und nicht richtig verstanden . es wird eine icon objekt erzeut auf der basis eines bildes. nur was soll man sich darunter vorstellen?

lg


----------



## Andi_CH (24. Feb 2011)

julian.veh hat gesagt.:


> [DUKE]Mein Name ist Katitten, Wodd Katitten[/DUKE]



Wodka Titten :lol: - seit wann brauchen Babies Wodka ???:L


----------



## Simon_Flagg (26. Feb 2011)

@ maik: ich denke ein imageicon-objekt ist einfach nur eine schnittstelle, die du einer methode übergeben kannst, damit die dann auf das was dahinter passiert zugreifen kann, ein handle quasi, was imageicon genau macht: ka, hat mich noch nie richtig interessiert, du könntest aber im sourcecode von java nachschauen (src.zip im java-verzeichnis)

lg


----------

