Ich schaue zu Java 8 Nachrichten im Vergleich zu 7 und zusätzlich zu sehr interessanten Dingen wie Lambdas oder dem neuen Zeitrahmen fand ich, dass ein neues Feature (?) Eingeführt wurde: Standardmethoden.Warum brauchen wir Standardmethoden in Java?
fand ich das folgende Beispiel in this article:
public interface Math {
int add(int a, int b);
default int multiply(int a, int b) {
return a * b;
}
}
Es scheint mir sehr seltsam. Der obige Code sieht wie eine abstract
Klasse mit einer implementierten Methode aus. Warum also Standardmethoden in eine Schnittstelle einführen? Was ist der eigentliche Vorteil dieses Ansatzes?
Im gleichen Artikel ich diese explaination lesen:
Warum sollte man Methoden in Interfaces hinzufügen? Das liegt daran, dass Schnittstellen zu eng mit ihren Implementierungsklassen verbunden sind. es ist nicht möglich, eine Methode in der Schnittstelle hinzuzufügen, ohne die Implementierungsklasse zu unterbrechen. Nachdem Sie eine Methode in der Schnittstelle hinzugefügt haben, müssen alle implementierten Klassen den Methodenkörper dieser neuen Methode deklarieren.
Nun, das überzeugt mich überhaupt nicht. IMHO Ich glaube, dass, wenn eine Klasse implementiert eine Schnittstelle obviously Methoden Körper für jede Methode darin deklarieren muss. Dies ist sicherlich eine Einschränkung, aber es ist auch eine Bestätigung seiner "Natur" (wenn Sie verstehen, was ich meine ...)
Wenn Sie gemeinsame Logik zu jeder erbenden Klasse haben, werden Sie es in eine implementierende abstract
Klasse .
Also, Was ist der wahre Vorteil einer Standardmethode? (Es sieht eher wie dieses Problem zu umgehen, als ein neues Feature ...)
UPDATE Ich verstehe, dass dieser Ansatz für die Abwärtskompatibilität ist, aber es hat mich noch nicht überzeugen so sehr. Eine Schnittstelle repräsentiert ein Verhalten, das eine Klasse MUSS haben muss. Eine Klasse, die eine bestimmte Schnittstelle implementiert, hat sicherlich dieses Verhalten. Aber wenn jemand die Schnittstelle beliebig ändern kann, ist diese Einschränkung gebrochen. Das Verhalten kann sich jederzeit ändern ... liege ich falsch?
In Verbindung stehende: http://StackOverflow.com/Questions/19998454/interface-with-default-methods-VS-abstract-Class-in-Java-8 und http://StackOverflow.com/Questions/20139404/Java -8-default-methods-vs-non-abstract-Methoden-in-abstract-classes – assylias
Sie können nur eine Klasse erweitern, aber beliebig viele Schnittstellen implementieren. –