Interfaces

brunso

Mitglied
Hallo,

vielleicht mag dies ja auch eine saublöde Frage sein, aber leider finde ich nirgends so die richtige(einleuchtende) Antwort.

Wozu braucht man Interfaces, wenn die Implementierung dann doch in der eigentlichen Klasse jedesmal vorgenommen werden muss?:confused:

Gruss

Brunso
 
Hallo brunso,

hier sind Interfaces eigentlich recht gut erklärt.

Es geht halt darum das man eigene Klassen schreibt und dem Nutzer dieser Klassen die Möglichkeit gibt mit diesen zu interagieren, dazu die Interfaces, man zwingt ihn quasi dazu eine eigene Klasse zu schreiben, die die im Interface benannten Methoden enthält und somit seinen Nutzen aus den Klassen zu ziehen.

gruß klaus.
 
Danke KlaDi,

ne, das ist soweit ja auch klar, nur warum. Also wenn ich ein Interface schreibe, dann habe ich da ja keine implementierungen drin. Genauso wenn ich in meine Klasse implements ActionListener hat. Die Methoden darin sind dann ja auch nur die Rümpfe, implementieren muss ich es ja selbst.

Aber kann man sich dann nicht das ganze "implements IRGENDWAS" sparen?

Ist die Frage zu doof?


Gruss

Brunso
 
Hallo brunso,

die Methoden die dann automatisch implementiert werden geben Dir ja die Möglichkeit bei einem bestimmten eintreffenden Ereignis etwas bestimmtes auszuführen.

Nehmen wir jetzt mal als Beispiel den Mouselistener.
Dann musst Du gleich 3 Methoden implementieren:
Code:
public void mouseDoubleClick(MouseEvent e) {
	// TODO Auto-generated method stub
				
}

public void mouseDown(MouseEvent e) {
	// TODO Auto-generated method stub
}

public void mouseUp(MouseEvent e) {
	// TODO Auto-generated method stub
}

Somit hast Du die Möglichkeit zu sagen, was passieren soll, wenn mit der Maus auf etwas geklickt wurde. Was passieren soll, wenn doppelt auf etwas geklickt wurde und was passieren soll, wenn die Mauslosgelassen wurde.
Wären diese Methoden nicht schon vorgeben, müsstest Du erstmal selbst den Code entwicklen, der auf die Maus reagiert und prüft ob geklickt wurde, wie oft geklickt wurde und an welcher Stelle. Durch die Interfaces wird die im Endeffekt arbeit abgenommen und Du kannst Dich darauf beschränken, was passieren soll, wenn eines der Ereignisse eintritt.

gruß klaus.
 
Hallo,

um es mal kurz zu an einem Beispiel des ActionListeners zu erklären.
Jedes Object(z. b. JButton) dem man einen ActionListener hinzufügen kann. Hat eine Liste mit den ganzen ActionListenern. Wenn man nun auf einen Button klickt arbeitet er die Liste ab und führt jedes mal die Methode actionPerformed aus. Das funktioniert aber nur durch das Interface. Hättest du das Interface nicht, müsste der JButton wissen, welche Klasse das ist die die Methode hat. Also muss es nicht immer auf ne andere Klasse gecastet werden sondern immer nur auf das Interface.

Java:
package tutorials;

public class InterfaceExmple
{

  public InterfaceExmple()
  {
    Ausfuerer ausfuerer = new Ausfuerer();
    ausfuerer.addMyListener(new MyListenerImplementation());
    ausfuerer.addMyListener(new NochMalMyListenerImplementation());
    ausfuerer.ausführen();
  }
  
  public static void main(String[] args)
  {
    new InterfaceExmple();
  }

}

Java:
package tutorials;

import java.util.ArrayList;
import java.util.Iterator;

public class Ausfuerer
{

  private ArrayList listeners = new ArrayList();
  
  public void addMyListener(MyListener listener){
    listeners.add(listener);
  }
  
  
  public void removeMyListener(MyListener listener){
    listeners.remove(listener);
  }
  
  public void ausführen(){
    for (Iterator iter = listeners.iterator(); iter.hasNext();)
    {
      MyListener listener = (MyListener) iter.next();
      listener.action();
    }
  }
}

Java:
package tutorials;

public class MyListenerImplementation implements MyListener
{

  public void action()
  {
    System.out.println("Dafür ist ein Interface");
  }

}


Java:
package tutorials;

public class NochMalMyListenerImplementation implements MyListener
{

  public void action()
  {
    System.out.println("Nochmal");
  }

}

Java:
package tutorials;

public interface MyListener
{

  public void action();
}

Ich hoffe das ist etwas verständlich.


MFG

zEriX
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück