Interface: wie damit arbeiten

Kababär

Top Contributor
Hi,

Ich habe lange darüber nachgedacht wozu man Interfaces überhaupt braucht, denn auf den ersten Blick sieht alles nur nach mehr Arbeit aus, bis ich mir bewusst wurde, dass es wirklich Sinn macht, Interfaces zu benutzen, wenn man den Client "nur" mit Interfaces statt den "direkten" Objekten arbeiten lässt.
Jetzt stoße ich aber schnell an Denk-und Designfehler. Statt
Code:
Object o = new Object();
Verwende ich nun (auch bei Parametern)
Code:
Interface in = new Object();

Jetzt habe ich allerdings viele Klassen, die alle einen gleichen Mehodennamen haben und nur manche dieser Klassen brauchen bei der Methode mehrere Parameter.
Wie realisiere ich das, dass ich quasi alles Klassen mit einem Interface in einen Topf kriege, so dass ich nur noch eine einzige Methode brauche, die dann mit dem Interface weiter arbeitet?

Beispiel:
Code:
Class A{
  Public void lese(File f){
  //lese Datei
   }
}

Code:
Class B{

Public void lese(File f, String Format){
// lese Datei eines bestimmten Formats
}}
 
Naja, so im allgemeinen eben garnicht.
Interfaces sind dazu da, Dinge zu "verallgemeinern".
Du hast hier aber nunmal unterschiedliche Dinge, bzw. Spezialfälle.

Man könnte dein Beispiel so zu einem Interface machen:

Java:
interface MyFileReader{
    boolean accept(String format); //Methode die überprüft, ob Dateiformat unterstüzt.
    void read(File f);
}

In Klasse A würde accept immer true zurückliefern, in Klasse B und "anderen" Spezialfällen muss hier je nach Eingabe entschieden werden.
 
Danke JCODA, so werde ich es machen.

Klaus, ich habe ein Interface
Code:
public interface IWriteable {

    public void write();
}
und rufe dann mittels
Code:
IWriteable iw;

//Abfragen und co...
iw = new myWriterCS();
einen speziellen Writer auf, der das Interface implementiert.
Ich habe verschiedene Writer, die alle das Interface implementieren, aber logischerweise anders schreiben.
Funktioniert einwandfrei.

Edit: Andersrum. Statische Methoden im Interface erfordern einen Rumpf, oder? Und dabei geht die OOP verloren, oder?
Ach keine Ahnung, bleiben wir beim Thema 😀
 

Zurück
Oben