Sind "public" und "public final" redundante interface-Felder?
Ich war das Lesen dieses post Warum würde eine statische verschachtelte Schnittstelle in Java? insbesondere die erste Antwort. In dieser Antwort wird geschrieben, dass die Worte "public" oder "public final" auf Oberfläche Felder sind redundant. Meine Frage ist: warum?
Warum sollte ich Sie entfernen? Wenn ich etwas wie dieses:
public interface Int1 {
public void add();
void remove();
}
Nicht bedeuten, dass ich will add
Methode implementated, von welcher Klasse auch immer, während remove
Methode implementated nur von Klassen meines gleichen Paket?
- Die keywords
abstract
undpublic
sind redundant für die Methoden innerhalb einer Schnittstelle und der Schnittstelle selbst. Sie sind implizit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja.
Alle Methoden in einem interface sind implizit
public
undabstract
(aber nichtfinal
).Alle Felder in einer Schnittstelle sind implizit
public
,static
undfinal
.Den JLS-Staaten. Es zeigt auch, dass diese Modifizierer können weggelassen werden.
Warum? Nun, es gibt eine Vielzahl von Gründen:
Felder und Methoden sind implizit
public
denn der Punkt, der ein interface zu deklarieren ... - Schnittstelle, die anderen Klassen sehen können. (Wenn Sie wollen /müssen den Zugriff einschränken, erfolgt dies über eine access-modifier auf die Schnittstelle selbst.)Felder sind
static
denn wenn Sie nicht Sie wäre die Deklaration sichtbare Instanz-Felder auf ein Objekt ... und das ist schlecht für die Kapselung.Felder sind
final
da nicht-Finale Felder wäre ein weiterer Weg, zu deklarierenpublic
static
Felder ... die sind schrecklich aus OO-Sicht.Methoden sind
abstract
weil damit Methode Körper effektiv drehen interfaces in abstrakte Klassen.Anderen Grund für abstrakte Methoden und statische Felder in einer Schnittstelle ist, dass, wenn Sie nicht, Diamant-Vererbung und der Vererbung einer Methode aus zwei verschiedenen Schnittstellen sowohl problematisch sein.
Aber so oder so, das ist wie Java ist definiert, so dass die Fragen irrelevant ... es sei denn, Sie werden denken, erfinden Ihre eigene Programmiersprache.
Beachten Sie, dass in Java 8, die Sie kann deklarieren von Methoden in einer Schnittstelle, mit der
default
modifier. Und in Java 9, Sie kann erklärenprivate
Methoden, in einigen Fällen. Aber die Verwendung despublic
Schlüsselwort ist immer noch redundant.Sie nicht haben, um Sie zu entfernen. Der Java-compiler ist das egal.
Sie kann entfernen Sie Sie, aber Sie nicht müssen entfernen, es sei denn, Sie versuchen, zu entsprechen, einige Java-Stil-Richtlinien, die darauf bestehen, auf diesem.
Dein code wird wohl auch noch lesbar, wenn Sie konsistent sind, aber könnten Sie es konsequent durch die Verwendung der redundanten Modifikatoren überall; z.B. indem Sie Sie, anstatt Sie zu entfernen.
Nein, es bedeutet nicht, dass. Oder zumindest, es könnte bedeuten, dass Sie, aber es wird nicht bedeuten, dass der Java-compiler, andere Java-Werkzeuge ... oder andere Menschen Lesen und die Pflege Ihres Codes. IMO, wäre es schlecht beraten, Ort alle Bedeutung auf das Vorhandensein oder fehlen von redundanten keywords.
Können Sie nicht ein
final
deklarierte Methode in einer Schnittstelle. Felder sind immerfinal
aber die Methoden sind immerabstract
(und niefinal
). Sie kann nicht definieren, eine interface-Methode implementiert werden, die nur von Klassen im gleichen Paket.* Von Abschnitt 9.3 der Java Language Specification:und von Abschnitt 9.4:
* Als Paul Bellora Punkte in einen Kommentar, können Sie das interface selbst, package-private (oder protected, oder sogar privat), wenn Sie möchten, zu beschränken, Ihre Sichtbarkeit.
dies Lesen: http://checkstyle.sourceforge.net/config_modifier.html
Ja die öffentlichkeit ist überflüssig, weil in einer
Interface
alle Methoden sind implictlypublic
undabstract
.Denke ich es ist ein schlechter Stil, hinzufügen
public
oderabstract
, denn beide sind implizit angewendet.Diese sieht sauberer aus, und zeigt, dass Sie wissen, dass Sie implict öffentlichen
vom Java Language Specification (JLS)
Ich Schreibe Schnittstellen, ohne die
public
Schlüsselwort für Methoden. Es ist redundant.