Announcement

Collapse
No announcement yet.

Verständisfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Verständisfrage

    Hallo, ich habe eine Frage zu folgendem Code:

    Code:
    import java.awt.Frame;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    
    
    
    public class Schliesse {
       public static void schliesse(Frame f){
    	 f.addWindowListener(new WindowAdapter(){
    		  public void windowClosing(WindowEvent e){
                      	Runtime.getRuntime().exit(0);
    		  }
    	  }  );	
    	  
       }
    }
    Ich habe versucht mir selber den aus meiner Sicht etwas kryptischen Aufruf von WindowsAdapter zu erklären zu erklären:

    WindowAdapter implementiert WindowListener (WindowListener ist demnach ein Interface, andernfalls könnte man es nicht implementieren), allerdings handelt es sich um eine "leere Implementierung", d.h. Methoden aus WindowListener werden nicht überschrieben. Weil WindowAdapter ein Interace implementiert, aber nicht dessen Methoden überschreibt, ist WindowAdapter selber abstrakt. Da WindowAdapter keine Methoden definiert kann man alle Methoden von WindowListener nutzen ohne jedoch nicht benötigte Methoden implementieren zu müssen. So gesehen also ein Trick der uns Programmierarbeit erspart.
    Zuletzt editiert von xkris; 15.01.2010, 17:48.

  • #2
    Originally posted by xkris View Post
    WindowAdapter implementiert WindowListener ... , allerdings handelt es sich um eine "leere Implementierung", d.h. Methoden aus WindowListener werden nicht überschrieben.
    Die Schlussfolgerung ist nicht sauber formuliert: Ein Interface besitzt keine Methoden-Implementierungen, die man überschreiben kann. Deswegen sagt man ja auch, dass eine Klasse die Methodes eines Interface implementiert, aber nicht überschreibt. Nur Klassen können vererbte Methoden einer Oberklasse überschreiben.

    WindowAdapter ist zwar eine abstrakte Klasse, hat aber keinerlei abstrakte Methoden. WindowAdapter implementiert somit alle Methoden des Interface WindowListener, auch wenn es sich "nur" um leere Implementierungen handelt. Aber auch eine leere Implementierung ist eine Implementierung und nicht das selbe wie eine abstrakte Methode.

    Originally posted by xkris View Post
    Weil WindowAdapter ein Interace implementiert, aber nicht dessen Methoden überschreibt, ist WindowAdapter selber abstrakt.
    Sie oben. WindowAdapter implementiert alle Methoden des Interface, nur eben mit leeren Implementierungen. Das hat mit der Tatsache, das die Klasse abstact definiert ist, aber nichts zu tun. Dadurch, dass WindowsAdapter aber abstract deklariert ist, soll der Entwickler dazu "gezwungen" werden, eine Ableitung der Klasse mit mind. einer überschreibenden Implementierung zu erstellen. Eine Instanz von WindowsAdapter wäre ja ziemlich langweilig, die tut ja nichts; deshab hat Sun die Klasse abstract deklariert.


    Originally posted by xkris View Post
    Da WindowAdapter keine Methoden definiert kann man alle Methoden von WindowListener nutzen ohne jedoch nicht benötigte Methoden implementieren zu müssen. So gesehen also ein Trick der uns Programmierarbeit erspart.
    Siehe oben. WindowAdapter implementiert alle Methoden des Interface mit leeren Implementierungen. Die Schlussfolgerung von dir stimmt aber, du überschreibst lediglich die Methoden mit deiner eigenen Implementierung, die für dich relevant sind. Für die "uninteressanten" Methoden hat Sun bereits die (leeren) Implementierungen für dich geschrieben.

    Die einen nennen so etwas einen Trick, andere nennen das dann ein Pattern ;-)

    Comment


    • #3
      Ok, das war eine schöne Erklärung, danke

      Comment

      Working...
      X