Wozu dienen Schnittstellen?

Status
Nicht offen für weitere Antworten.
E

Edgrar

Gast
Hallo,

ich bin gerade am Java lernen. Angekommen bin ich jetzt bei Schnittstellen. Sie sollen nur Konstanten und abstrakte Methoden beinhalten können. Das heißt: Methoden ohne Köper. Was soll ich bitte mit Methoden ohne Körper? Was bringt es denn solche Methoden zu erschaffen, wenn ich jedesmal, wenn ich sie nutzen will, den Kram neu definieren soll?
Wenn ich das richtig verstanden hab, schreibt man die Signatur der Methode mit irgendwelchen Platzhaltern als Argumenten, und wenn man sie nutzen will, muss man die eigentliche Methode erst schreiben. Was soll das ganze dann? Wofür brauch ich den Käse dann eigentlich?

Ich bin mir sicher, dass das jmd weis. Ich würd mich über jede Antwort freuen.

Mfg Edgrar

L-ectron-X hat ein wenig "Textkosmetik" betrieben... :wink:
 

Sky

Top Contributor
Also, hört sich so an, als würdest Du über Interfaces sprechen.

Der Nutzen ist relativ einfach erklärt: Du definierst eine Schnittstelle und andere Klassen können sich der Methoden bedienen, ohne die Konkrete Klasse bzw. dessen Implementierung zu kennen.

Nehmen wir mal als Beispiel das Interface "Comparable". Alle Klassen, die dieses implementieren und in einer Liste sind, können über die Collections.sort sortiert werden. Die Klasse Collections kann so alle möglichen Arten von Objekten sortieren, ohne zu wissen, wie die Objekte aussehen.
 
G

Guest

Gast
sorry kapiert hab ich leider immer noch nich , wie kann das Interface comparable irgendetwas sortieren , wenn sie ausschlieslich methoden beinhaltet die keinen körper haben. Ich stell mir das so vor der Programmierer von sims2 tippt sim in seinen Editor und fertig ist ein Sim mit allen eigenschaften ?? ???:L
 
R

Roar

Gast
nein, das interface Comparator sortiert nichts, es definiert nur die methode compare(Object, Object) das allein kann, wie du gesagt hast, nix machen. das eigentliche sortieren macht die methode Collections.sort(). damit die methode sort() weiß, wie die elemente sortiert werden müssen, also dass 2 nach 1 kommt und dass "müller" nach "meier" steht übergibt man ihm einen Comparator. damit man nicht für jeden dateintyp eine eigene methode implementieren muss sort(String[]) und sort(int[]) und sort(Date[]) hat man einfach eine methode gemacht die auf einen übergebenen Comparator zurückgreift. kapicse?

edit: noch ein beispiel: die methode sort() bekomtm als erstes argument eine List in der die elemente gespeichert sind. eien List ist ein interface, und definiert methoden, die jede liste implementieren, wie add() get() remove() blabla
so isses ladde ob du der methode jetzt einen Vector, eine ArrayList oder eine KartoffelsalatListe übergibst.
 
E

edgrar

Gast
danke für die antworten . Hab das alles ma durchgelesen , und weis jetzt besser bescheid ,auch die links. Aber so richtig weis ich ehrlich gesagt immer noch nicht. So das ich die Interfaces praktisch nutzen könnte.

Ich übergebe einer bereits fertigen Methode als Argument ein Interface. Das Interface kann (muss) ich später noch implementieren , was bedeutet das ich der Methode so ziemlich alles übergeben kann - richtig?

Falls ihr noch Geduld erübrigt, kann mir da jmd ein Codebeispiel geben. ICh hab da eins im Buch , aber da blick ich nicht durch.

Grüße Edgrar
 

MPW

Top Contributor
Ich hab' auch lange nicht kapiert was das Klasseneinteilen oder Methoden sollen..wenn du's ein paar mal angewendet hast, merkst du die Vorteile;-)
 

Sky

Top Contributor
Ok, ein Beispiel aus meiner Anfangszeit habe ich noch ausgegraben: Gegeben ist hier das interface "Tier"
Code:
interface Tier {
  public void gibLaut();
}
Ein Tier kann einen Laut geben. Jedes Tier gibt zwar einen anderen Laut, aber trotzdem gibt es die allgemeine Regel, dass es einen Laut geben kann.

Wenn wir nun Klassen wie Hund, Katze, Vogel schreiben, so würde dies so aussehen:
Code:
class Hund implements Tier {
  public void gibLaut() {
    System.out.println( "Wau" );
  }
}

class Katze implements Tier {
  public void gibLaut() {
    System.out.println( "Miau" );
  }
}

class Vogel implements Tier {
  public void gibLaut() {
    System.out.println( "Piep" );
  }
}

So nun könnte man sich ein Tier-Array anlegen, dass die verschiedene Tiere hält. Dadurch, dass die Schnittstelle bekannt ist, kann man einen Laut geben lassen... egal, welches Tier es ist!
Code:
class Zoo {
  public static void main( String[] args ) {
    Tier[] tiere = new Tier[3];
    tiere[0] = new Hund();
    tiere[1] = new Katze();
    tiere[2] = new Vogel();

    for( int i = 0; i < tiere.length; i++ ) {
      tiere[i].gibLaut();
    }
  }
}

Ich hoffe, ich konnte Dir damit weiterhelfen...
 

byte

Top Contributor
Weil Mehrfachvererbung in Java verboten ist und daher das Konzept der Interfaces eingeführt wurde. Natürlich kann man das Beispiel oben auch mit einer abstrakten Klasse realisieren, aber dann kann man nicht mehr von anderen Klassen erben.

PS: Guck mal aufn Tacho. Der Thread ist 1 Jahr alt.
 
naja ich meine ja nur... ich hab das konzept von interface nie verstanden.. irgendwie ist eine barrier in meinem kopf... wurde mir auch schon oft er klärt , hab auch nie ein beispiel gefunden das dies mir richtig klar macht....
 

Murray

Top Contributor
Wow, ein alter Thread wiederbelebt...

Wenn die drei Ausprägungen von Tier irgendeine ***Implementierung*** gemeinsam haben, die redundant in den Klassen steckt, dann würde es sich lohnen, anstelle des Interface hier eine (abstrakte) Basisklasse einzusetzen. Ganz sptzfindig betrachtet könnte man meinen, dass alle gibLaut-Methoden ja einen String ausgeben; man könnte also einen gemeinsamen Code herausfaktorisieren:

Code:
public abstract class AbstractTierImpl implements Tier {
  public void gibLaut() {
     System.out.println( getLautStr());
  } 
  abstract public String getLautStr();
}

public class Hund extends AbstractTierImpl {
  public String getLautStr() {
     return "Wau";
  }
}

public class Katzte extends AbstractTierImpl {
  public String getLautStr() {
     return "Miau";
  }
}

public class Vogel extends AbstractTierImpl {
  public String getLautStr() {
     return "Piep";
  }
}

Da Java nunmal keine Mehrfachableitung kennt, muss man im Einzelfall abwägen, ob man lieber Ableitung oder ein Interface verwendet.

Denn: angenommen, in der gleichen Anwendung gäbe es unabhängig von der Klassifizierung Tier auch die Klassifizierung Flugobjekt, die z.B. von Flugzeugen oder von Vögeln erfüllt werden kann. Diese Klassifizierung könnte man ebenfalls sowohl per Interface als auch per (abstrakter) Basiklasse reliesiren.

Wenn jetzt sowohl für Tier als auch für Flugobjekt kein Interface, sondern eine Baaisklasse definiert wäre, dann könnte ein Vogel niemals beides sein.
 

Caffè Latte

Bekanntes Mitglied
Hi,

ich denke, das hat nicht unbedingt was mit Mehrfachvererbung zu tun. In C++ gibts ja auch abstrakte Klassen, dafür aber kein Interface.

Wenn wir bei der Viecherei bleiben: über das Interface erreichst du, dass die Methode zum Laut geben immer gleich heisst; Du brauchst dich also nicht darum zu kümmern, ob das Objekt ein Hund, eine Katze etc. ist.

Richtig Sinn macht das alles nur, wenn

a. der Code wiederverwendbar sein soll und
b. das Projekt etwas komplexer ist.

Wenn die Bibliothek erst mal steht, hat man es bei der Nutzung wesentlich einfacher. Denk einfach mal an die Java Foundation Class (Swing). Ähnliche Objekte haben gleichnamige Methoden und Attribute. Sonst liesse sich das Framework doch gar nicht nutzen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Wozu dient Interfaces? Java Basics - Anfänger-Themen 6
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
N Wozu nutzt man in der Main Methode das args Array? Java Basics - Anfänger-Themen 10
S Vererbung Abstrakte Methoden: Wozu das Ganze?! Java Basics - Anfänger-Themen 7
W Stackabarbeitung - Wozu dient das "True" ? Java Basics - Anfänger-Themen 1
R Wozu sind Annotations da? Java Basics - Anfänger-Themen 3
H abstract - Wozu? Java Basics - Anfänger-Themen 6
T Erste Schritte Endlosschleife & wozu braucht man /* und */ Java Basics - Anfänger-Themen 19
V OOP Wozu Objekt erstellen? Java Basics - Anfänger-Themen 2
G Wozu ist die Methode offsetByCodePoints(int, int) beim StringBuilder sinnvoll? Java Basics - Anfänger-Themen 1
G wozu dient getContentPane()? Java Basics - Anfänger-Themen 1
M Wozu Upcasting? Am Beispiel List = ArrayList Java Basics - Anfänger-Themen 2
P Wozu brauche ich (this.)? Java Basics - Anfänger-Themen 3
F Wozu braucht man array list? Java Basics - Anfänger-Themen 29
U Wozu dient ein Vector in Java? Java Basics - Anfänger-Themen 6
B Wozu Observer? Java Basics - Anfänger-Themen 9
D Sinn von Interfaces - Wozu? Java Basics - Anfänger-Themen 9
J Datentypen Array in enum, ?? Wozu ?? Java Basics - Anfänger-Themen 3
J Wozu werden die anonyme Klassen verwendet? Java Basics - Anfänger-Themen 9
F Wozu ist Java gut? Java Basics - Anfänger-Themen 7
H Maps? Wozu? Nutzen? Java Basics - Anfänger-Themen 3
0 Wozu braucht man Generics? Java Basics - Anfänger-Themen 1
V wozu ist das 'L' beim long notwendig ? Java Basics - Anfänger-Themen 5
A wozu ant? Java Basics - Anfänger-Themen 12
S Wozu dient die Main Class? Java Basics - Anfänger-Themen 3
Y Wann / Wozu inner class Java Basics - Anfänger-Themen 3
S Desginfrage Interface - aber wozu eigentlich? Java Basics - Anfänger-Themen 2
N Wozu Applications? Java Basics - Anfänger-Themen 8
M Methode bekommt ein Objekt der Klasse als Parameter. Wozu? Java Basics - Anfänger-Themen 4
R Wozu sind Interfaces gut? Java Basics - Anfänger-Themen 14
B Hashcode?Was ist das und wozu? Java Basics - Anfänger-Themen 2
R Wozu Interfaces ? Java Basics - Anfänger-Themen 5
G Konstruktoren (was, wozu, wieso, warum) Java Basics - Anfänger-Themen 4
J Wofür dienen Interfaces ? Java Basics - Anfänger-Themen 1
G String soll als Variablenname dienen Java Basics - Anfänger-Themen 19
B Kommunikation mit Seriellen Schnittstellen + Integration einer lib Java Basics - Anfänger-Themen 1
Fragerjava Java Schnittstellen Java Basics - Anfänger-Themen 6
L Abstrakte Typen und Schnittstellen Java Basics - Anfänger-Themen 19
S Zufallszahl-Generatoren (Schnittstellen) Java Basics - Anfänger-Themen 14
N Generische Schnittstellen Java Basics - Anfänger-Themen 2
K Welchen Typ haben Variablen in Default-Methoden und in statischen Methoden in Schnittstellen? Java Basics - Anfänger-Themen 4
Helgon Interface Runnable Frage / Schnittstellen allgemein Java Basics - Anfänger-Themen 3
S ich begreife es einfach nicht -> zweck der Schnittstellen Java Basics - Anfänger-Themen 27
D Interfaces / Schnittstellen Java Basics - Anfänger-Themen 8
C Schnittstellen und Abstrakte Klassen Java Basics - Anfänger-Themen 3
G Schnittstellen Programmierung Java Basics - Anfänger-Themen 5
G in Java mit Schnittstellen arbeiten Java Basics - Anfänger-Themen 5
G Nutzen von Schnittstellen Java Basics - Anfänger-Themen 14
M abstrakte klassen / Schnittstellen Java Basics - Anfänger-Themen 4
E Schnittstellen und Objekte in komplizierter Form Java Basics - Anfänger-Themen 10
G schnittstellen Java Basics - Anfänger-Themen 4
Y Frage zu Schnittstellen Java Basics - Anfänger-Themen 17
C Schnittstellen ???? Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben