Hallo leute,
ich wollte mal Fragen zum Theme interface(hab sowas noch nie gemacht) stellen:
1.Was ist ein interface?
2.Wie erzeugt man es?
3.Wofür benutzt man es?
Bei Vererbung verwendet man es häufig um "The Deadly Diamond of Death" zu vermeiden, d.h. z.B 2 Klassen erben von einer Superklasse eine Methode, und eine weitere Klasse soll jetzt von diesen beiden erben ...
Wenn nun die untereste Klasse die Methode aufgeruft, weiß man nicht welche Methode als super.machIrgendas() herhalten muss.
Dashalbt lässt man Interfaces implementieren!
Java:
publicclassMeineklasseimplementsMeininterface{}
Ich hoffe ich konnte dir ein bisschen weiterhelfen!
Danke:toll:
Ich glaub, dass ich es schon etwas(nicht wenig) mehr verstanden habe, aber zwei Fragen habe ich noch:
1.Wofür benutzt man sowas(Beispiel an einem Programm oder ähnliches)?
2.Wenn ich ein Interface mache:
Wenn ich jetzt ein Collection habe die vom Typ der Superklasse ist (hier ist es Grafiken "extends Grafiken") und ich will für die Elemente, die sich "zeichenen" können, d.h. für alle Zellen die Methode zeichnen aufrufen will kann ich es folgendermaßen machen:
Java:
ArrayList<Grafiken> meineGrafiken =newArrayList<Grafiken>();// Eine einfach ArrayList vom Supertyp Grafiken
meineGrafiken.add(newZelle());// Ein Beispiel Element for(Zeichenbar zeich : meineGrafiken){
zeich.zeichneGrafik(g);}
Die for-Schleife geht für jedes Element, dass Zeichenbar implementiert die Liste durch und ruft die überschriebene Methode zeicheGrafik() auf!
Danke
Ich glaub, dass ich es schon etwas(nicht wenig) mehr verstanden habe, aber zwei Fragen habe ich noch:
1.Wofür benutzt man sowas(Beispiel an einem Programm oder ähnliches)?
2.Wenn ich ein Interface mache:
Dann kann cih das interface und das implementieren des interfaces doch einfach weglassen, oder?
Für - Jedes Element in meineGrafiken, dass Teilbar implementiert gehe die Liste durch:
[Jedes Element wird jetzt nacheinander auf die implementierung geprüft, also wie bei einer normalen
for (Element e : Collection)]
Java:
teil.zeichneGrafik(g);
Wenn es auf ein Element gestoßen ist: Nimm dieses Element und rufe für dieses Element (in dem Beispiel das Zellen-Objekt) die überschriebene Methode auf, die ich in dem Interface Teilbar deklariert habe (zeichneGrafik).
Dann gehe wieder nach oben und Prüfe das nächste Element auf Teilbar
Hoffe es ist verständlich ...
Solltest du die for (Element e : Collection) nicht kennen erklär ich sie dir gerne nochmal!
Nein! Da somit der Effekt des Interfaces verloren geht!
Ich will ja nicht zeichneGrafiken auf irgendein Objekt aufrufen, sondern nur auf Elemente die Zeichenbar implementieren!
Das stimmt nicht. foreach ist ein Ersatz für Iterator; es ersetzt aber nicht instanceof.
Du musst explizit überprüfen ob deine Grafikelemente Zeichenbar implementieren, ansonsten fliegt dir das Ding um die Ohren:
Java:
ArrayList<Grafiken> meineGrafiken =newArrayList<Grafiken>();// Eine einfach ArrayList vom Supertyp Grafiken
meineGrafiken.add(newZelle());// Ein Beispiel Element for(Grafiken zeich : meineGrafiken){if(zeich instanceofZeichenbar){
zeich.zeichneGrafik(g);}}