Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe in meinem Buch die Interfaces erreicht und verstehe diese nicht
Folgender Code ist gegeben:
Java:
public class DieMain{
public static long calcVolumen(MeinInterface mi){
return (long)mi.getLaenge() * mi.getBreite() * mi.getHoehe();
}
public static void main(String[] args) {
Wuerfel wuerfel = new Wuerfel();
wuerfel.laenge=10;
wuerfel.breite=10;
System.out.println(calcVolumen(wuerfel));
}
}
Java:
public class Wuerfel implements MeinInterface{
int laenge;
int breite;
int hoehe;
@Override
public long getLaenge() {
return laenge;
}
@Override
public long getBreite() {
return breite;
}
@Override
public long getHoehe(){
return hoehe;
}
}
Java:
public interface MeinInterface {
public long getLaenge();
public long getBreite();
public long getHoehe();
}
Ich verstehe im ersten Codeblock den Parameter in Zeile 3 nicht.
Wieso übergebe ich dort das Interface selbst und kein Objekt der Klasse "Würfel", weil die Klasse "Würfel" ja schon das Interface implementiert... Wäre das dann nicht doppelt gemoppelt?
Und wozu überhaupt solch ein Interface erstellen, ich kann diese Methoden doch einfach in der Klasse Würfel schreiben oder nicht? So würde ich mir eine Menge Verwirrung ersparen und hätte bei einer Klasse keinen redundanten Code...
Weil das Interface von mehreren Objekten implementiert werden kann. Ansonsten müsstest du für jedes eigene Objekt welche eine Länge, Höhe und Breite hat eine neue Methode schreiben. So garantierst du, dass jedes Objekt welches das Interface implementiert, auch die dort angegebenen Methoden beherrscht.
Bsp. (ohne Funktionsgewähr):
Java:
public interface valueField{
String getValue();
}
public class datumtext extends JTextField implements valueField{
...
@Override
public String getValue(){
return new Date().ToLocale()+" "+getText();
}
}
public class normaltext extends JTextField implements valueField{
...
@Override
public String getValue(){
return this.getText();
}
...
}
Je nachdem, welches Objekt das Interface gerade implementiert, bekommst du ein anderes Ergebnis. Über das Interface weisst du, unabhängig vom eigentlichen Objekttyp, welche Methode du aufrufen musst, um an das value zu kommen.
ssoul26@ Vielen Dank für deine Erklärung, hat mir sofern geholfen, dass ich jetzt weiß, wieso Interfaces verwendet werden
rme@ Vielen Dank, dass du mich noch einmal auf meinen alten Thread aufmerksam gemacht hast, habe ich wohl "überlesen". Trotzdem verstehe ich diesen Part immer noch nicht:
[DUKE]"Das tolle ist jetzt, dass du ohne weiteres ein Agila-Objekt übergeben kannst, wenn Auto "Fahrbar" implementiert. Der Vorteil ist, dass du später auch Fahrräder oder sonstwas mit diesem Interface ausstatten kannst und deine Methoden trotzdem noch funktionieren. Hättest du "Auto" als Parametertyp verwendet, wäre das nicht so elegant gewesen."[/DUKE]
Damit meinte ich, dass ein Interface den Vorteil hat, dass es unabhängig von der Vererbungshierarchie in eine Klass eingefügt werden kann. Wenn man ein Interface für fahrbare Dinge hat, kann man später ganz viele davon erstellen, z.B. Autos, Fahrräder, Motorräder.. und ist dabei nicht auf eine gemeinsame Basisklasse angewiesen. In Java verwendet man Vererbung eigentlich nur, wenn man Polymorphie tatsächlich benötigt, ansonsten sind Interfaces das Mittel der Wahl.