In Java, wann soll ich eine abstrakte Methode in einer Schnittstelle verwenden?
-
18-09-2019 - |
Frage
Ich habe die folgende Schnittstelle in Java
public interface IFoo
{
public abstract void foo();
public void bar();
}
Was ist der Unterschied zwischen foo () und bar ()? Wann soll ich abstrakt verwenden?
Beide scheinen zu tun, was ich will, wenn ich bin fehlt etwas subtiler?
Aktualisieren Duplizieren von Warum sollte man ein Java Interface-Methode als abstrakt deklarieren?
Lösung
Es gibt keinen funktionalen Unterschied. Keine Implementierung wird immer in einer Java-Schnittstelle, so dass alle Methodendeklarationen vorgesehen sind implizit abstrakt.
[1] Siehe: http: //java.sun .com / docs / Bücher / tutorial / java / iAndi / abstract.html
Ein direktes Zitat bildet die oben:
Hinweis: Alle Methoden in einer Schnittstelle (den Schnittstellen Abschnitt) implizit abstrakt ist, so die abstrakte Schlüssel nicht mit Interface-Methoden verwendet wird (es könnte sein-es ist einfach nicht notwendig)
.
Andere Tipps
Interface-Methoden sind sowohl public
und abstract
standardmäßig. Es gibt keinen Unterschied zwischen foo()
und bar()
und Sie können alle public
und abstract
Schlüsselwörter sicher entfernen.
Sie verpassen nichts. Von der Java Language Specification :
Jede Methode Erklärung im Körper der eine Schnittstelle implizit abstrakt, so ist sein Körper immer durch ein Semikolon dargestellt, keine Block.
Jede Methode Erklärung im Körper eine Schnittstelle ist implizit öffentlich.
Mit anderen Worten, können Sie die public
sowie die abstract
auf den Interface-Methoden verzichtet werden.
Es ist überflüssig (es gibt keinen Unterschied zwischen den beiden Erklärungen) und explizit in Abschnitt 9.4 der Java Language-Spezifikation:
Für die Kompatibilität mit älteren Versionen die Java-Plattform ist es gestattet, aber entmutigt, als eine Frage des Stils, zu spezifizieren redundant die abstrakte Modifikator für Methoden erklärt in Schnittstellen.
Und public
ist ähnlich unnötig und entmutigt:
Es ist erlaubt, aber stark als Frage des Stils entmutigt, redundant die angeben öffentlicher Modifikator für Schnittstellenmethoden.
Ich weiß nicht, warum public
ist stark entmutigt aber abstract
ist nur entmutigt ...
Beide erreichen die gleiche, da alle Methoden in einer Schnittstelle abstrakt sind.
abstract
in diesem Szenario ist nicht erforderlich (wie Methoden in Schnittstellen als public
Markierung).
Sie würden statt verwenden Sie diese auf ein Verfahren in einer abstrakten Klasse, um seine überragende durch eine Unterklasse zu erzwingen.
Es gibt keine sind Unterschied zwischen Erklärungen. Konzeptionell alle Methoden in einer Schnittstelle sind abstrakt.
Es macht keinen Unterschied. Alle Methoden in einer Java-Schnittstelle sind immer abstrakt.
Sehen Sie die erste Note unter diesem Link: http://java.sun.com/docs/books/ tutorial / java / iAndi / abstract.html
Sowohl foo () und bar () sind abstrakt, da sie innerhalb einer Schnittstelle deklariert sind. Das abstrakte Wort, das Sie hier verwendet wird, ist nicht von Bedeutung -. Sie es besser entfernen
Schnittstellen in Java sind gleich „irgendwie“ auf eine völlig abstrakten Klassen, so dass das Hinzufügen des „abstrakte“ Schlüsselwort auf eine Methodendeklaration in einer Schnittstelle hat nichts mit dem Verfahren zu tun!