Modifikatoren


Die Modifikatoren die keine Zugriffsmodifikatoren sind

Diese Modifikatoren steuern nicht den Zugriff, sondern die Eigenschaften des Objektes.

Dies ist eine Übersicht ob sie verwendet werden dürfen. Wenn Sie genutzt werden, wo sie keine Verwendung finden dürfen, dann wird dies mit einem Compilerfehler quittiert.

nutzbar beiKlassenInterfacesMethodenVariablen
staticJa (nested)Ja (nested)JaJa
finalJaNeinJaJa
abstractJaJa (automatisch)JaNein
nativeNeinNeinJaNein
strictfpJaJaJaNein
transistentNeinNeinNeinJa
syncronizedNeinNeinJaNein
volatileNeinNeinNeinJa

Ich werde jetzt nicht alle Modifikatoren durchgehen, das würde den Rahmen dieses Beitrages sprengen, sondern nur static, final und abstract.

static

Bei unserem kleinen Beispielprogramm ist die Methode eine statische Methode, aber was bedeutet dies?

public class JavaInstallation{
 public static void main(String[] args){}
}

Diese statische Methode ist der Grund warum kein Objekt der Klasse erzeugt werden musste. Statische Methoden und Variablen existieren außerhalb des Kontextes eines konkreten Objektes, daher können sie nicht auf nicht-statische Variablen oder Methoden ihrer Klasse zugreifen, sondern nur auf statische. Sie werden oft für Hilfsmethoden verwendet, der Zugriff andersrum, von nicht-statischen Variablen und Methoden auf eine Statische ist erlaubt.

Eine statische Variable hat nicht nur den Zweck, dass statische Methoden darauf zugreifen dürfen. Da auch diese Variable nur einmal existiert, egal wie viele Objekte es von dieser Klasse gibt, kann sie z.B. genutzt werden um die Anzahl der erzeugten Objekte zu zählen.

abstract

Ein Interface ist automatisch abstract, man kann es trotzdem explizit auf static setzen, dies ist einfach nur eine Redundanz und hat keine weitere Auswirkung. Die Wirkung von static ist, dass es unmöglich wird, ein Objekt von dieser Klasse oder Interface zu erzeugen, dies würde zu einem Compilerfehler führen. Wenn eine Klasse eine abstrakte Methode hat, dann muss die Klasse auch abstract sein. Eine abstrakte Klasse darf, muss aber nicht abstrakte Methoden aufweisen. Abstrakte Methoden sind einfach nur Methoden mit dem Keyword static und einem leeren Rumpf.

Man kann also keine Objekte erzeugen, da sie nicht statisch sind kann man sie auch nicht einfach so benutzen und eine solche Methode tut auch noch nichts? Da fragt man sich schon was überhaupt möglich ist. Die Antwort ist einfach, man kann von ihnen ableiten, eine Kind-Klasse der abstrakten Klasse erstellen oder eine Klasse die das Interface implementiert. In dieser kann man dann die leeren Methoden füllen.

final

Dieser Modifier ist, auf Klassen bezogen, der Gegensatz zu abstract. Die Weitervererbung einer auf final gesetzten Klasse ist verboten. Es kann keine Interfaces geben die final sind.

Eine Variable die auf final gesetzt ist, ist etwas völlig anderes. Hier bedeutet es, dass dieser nur einmal ein Wert zugeordnet werden darf, beim zweiten Versuch kommt es zum Compilerfehler.

Finale Methoden können, von einer abgeleiteten Klasse, nicht überschrieben werden.

Kommentar erstellen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.