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 hab mir gerade das Kapitel Interface im Java-Handbuch durchgelesen, jedoch versteh ich nicht ganz was das für nen sinn hat (zumindest nicht bei den angeführten beispielen)
kann man ganze methoden im interface schon definieren oder muss es "abstract" sein?
-> weil wenn es abstract ist ... muss ich die methode doch in meiner klasse welche das interface implementiert nochmals "definieren" da sie ja sonst leer wäre (abgesehen davon das man doch alle methoden aus einem interface ausführen muss - außer es ist (richtig) abstract.
das geht jetzt zwar auf abstract (aber das ist ja das "gleich"):
bei dem beispiel:
Java:
public abstract class GeometrischeFigur{
public abstract void male(Graphics g); // kein Rumpf!
}
public class Kreis extends GeometrischeFigur{
@Override
public void male(Graphics g){
g.drawOval(...); // eigene Implementierung: zeichen Kreis
}
}
public class Quadrat extends GeometrischeFigur{
@Override
public void male(Graphics g){
g.drawRect(...); // eigene Implementierung: zeichen Rechteck
}
}
ist es im endeffekt ja nur "mehr" arbeit ... also ist es in diesem fall nur für mich die rückmeldung "ich hab alles was ich da wollte"
wenn man aber den scanner ( auch wenn ich die funktionen nicht wirklich verstehe) verwendet kann man alle klassen die "GeometrischeFigur" implementieren einsammeln und ihnen anweißen sie sollen sich jetzt malen?!
Java:
public class Scanner{
private List<GeometrischeFigur> meineFiguren;
public void maleAlles(Graphics g){
for( GeometrischeFigur gf : meineFiguren ){
gf.male(g);
}
}
}
nebenfrage: würde das ganze auch gehen wenn ich zb die 2 klassen vordefiniert habe (also ich müsste sie nicht suchen) und ihnen anweiße die in beiden exisiterende methode "male" auszuführen - oder würde es einen fehler geben da nicht sichergestellt ist das es diese methode gibt?
Ich denke du denkst falsch.
Warum solltest du eine Klasse suchen müssen, wenn du nicht so etwas wie spezielle ClassLoader oder Reflektions oder was es da sonst noch so alles gibt verwendest? Und du kannst einer Klasse nichts anweisen. Das sind nur Vorlagen.
Interface sind einfach dazu da, dass du sicherstellen kannst, dass Methoden existieren, und trotzdem noch von einer anderen Klasse zu erben oder einfach irgendwelche Konstanten zu definieren (SwingConstants z. B.). Wenn eine Interfacemethode einen Body hätte, würde das selbe Problem wie bei Mehrfachvererbungen geben und das Prinzip wäre sinnlos.