Warum wäre es nicht statisch?
Es ist eine Konstante, die mit der Schnittstelle verbunden ist, und nicht mit einer bestimmten Instanz davon.
Der Hauptgrund, den ich vermute, ist das Implementierungsdetail der VM / Sprache.
Wenn eine Schnittstelle keine statischen Variablen haben darf, ist es nicht erforderlich, während der Erstellung der Klasse Speicher für die Schnittstelle zuzuweisen. Spezielle Benennungs- / Umbenennungsmechanismen sind nicht erforderlich, wenn Sie Variablen mit demselben Namen erben. Das einzige, was Sie brauchen, ist eine Tabelle, um die richtigen Funktionen aufzurufen, wenn die Schnittstelle benutzt wird.
Kurz gesagt - es erleichtert das Leben der Sprache / VM-Betreuer. Wenn Sie sich wirklich die Mehrfachvererbung und ihre Fallstricke und Fallen ansehen wollen, lesen Sie Object Oriented Software Construction von Bertrand Meyer (2nd Edition). Dann verstehen Sie, warum die Schnittstelle so einfach sein muss (und archiviert dennoch die meisten Dinge, die Mehrfachvererbung tut).
Eine Schnittstelle ist ein Vertrag , der die Interaktion zwischen Objekten definiert.
Diese Interaktion wird durch die exponierten Methoden und nicht durch die Variablen definiert. Variablen beschreiben nur das interne Arbeiten, nicht die Interaktion.
Beachten Sie, dass Variablen niemals für die Interaktion verwendet werden sollten. Nach dem OOP-Prinzip Kapselung wäre es ein Verbrechen, wenn 1 Klasse direkt auf eine Variable einer anderen Klasse zugreifen könnte.
Konstanten (z.B. %code% ) sind die einzige akzeptable Ausnahme. Da -Konstanten die einzige Art von Variablen sind, auf die direkt von anderen Klassen zugegriffen werden kann, ohne das Kapselungsprinzip zu verletzen , werden alle Variablen in einer Schnittstelle als %code% variables (d. H. Konstanten)
behandeltWeil Sie eine Schnittstelle nicht instanziieren können. Es kann auch keinen Methodenkörper geben, der eine nicht statische, nicht endgültige Variable verwendet.
Warum ist eine Variable, die in einer Schnittstelle verwendet wird, PUBLIC STATIC FINAL? Warum "statisch" im Besonderen?
Weil Sie eine Schnittstelle nicht instanziieren können. Es kann auch keinen Methodenkörper geben, der eine nicht statische, nicht endgültige Variable verwendet.
Der Hauptgrund, den ich vermute, ist das Implementierungsdetail der VM / Sprache.
Wenn eine Schnittstelle keine statischen Variablen haben darf, ist es nicht erforderlich, während der Erstellung der Klasse Speicher für die Schnittstelle zuzuweisen. Spezielle Benennungs- / Umbenennungsmechanismen sind nicht erforderlich, wenn Sie Variablen mit demselben Namen erben. Das einzige, was Sie brauchen, ist eine Tabelle, um die richtigen Funktionen aufzurufen, wenn die Schnittstelle benutzt wird.
Kurz gesagt - es erleichtert das Leben der Sprache / VM-Betreuer. Wenn Sie sich wirklich die Mehrfachvererbung und ihre Fallstricke und Fallen ansehen wollen, lesen Sie Object Oriented Software Construction von Bertrand Meyer (2nd Edition). Dann verstehen Sie, warum die Schnittstelle so einfach sein muss (und archiviert dennoch die meisten Dinge, die Mehrfachvererbung tut).
Eine Schnittstelle ist ein Vertrag , der die Interaktion zwischen Objekten definiert.
Diese Interaktion wird durch die exponierten Methoden und nicht durch die Variablen definiert. Variablen beschreiben nur das interne Arbeiten, nicht die Interaktion.
Beachten Sie, dass Variablen niemals für die Interaktion verwendet werden sollten. Nach dem OOP-Prinzip Kapselung wäre es ein Verbrechen, wenn 1 Klasse direkt auf eine Variable einer anderen Klasse zugreifen könnte.
Konstanten (z.B. Math.PI
) sind die einzige akzeptable Ausnahme. Da -Konstanten die einzige Art von Variablen sind, auf die direkt von anderen Klassen zugegriffen werden kann, ohne das Kapselungsprinzip zu verletzen , werden alle Variablen in einer Schnittstelle als public static final
variables (d. H. Konstanten)