2009-09-12 14 views
5

Ich möchte etwas ähnliches zu protected, wo nur eine Klasse, die das protected Feld und alles, was Unterklassen es implementiert auf es zugreifen können.Java: Zugriffsmodifizierer restriktiver als "geschützt", weniger restriktiv als "privat"?

Also, ich möchte in der Lage sein, eine Variable in der Basisklasse als private zu deklarieren, aber immer noch aus einer Unterklasse darauf zugreifen zu können.

Vielleicht ist dies gegen die Natur der Unterklasse, private und/oder protected.

Gibt es so etwas in Java?

+0

Als allgemeine Regel ist das Aussetzen von Variablen eine schlechte Idee - sogar für Unterklassen. Es gibt Ausnahmen, aber ich möchte Sie ermutigen, genau darüber nachzudenken, warum Sie dies tun wollen. (Ich weiß, dass die gleiche Frage für einen Getter-Methodenaufruf gelten würde - wollte nur auf ein mögliches Problem hinweisen) –

Antwort

9

Es gibt nur vier Zugriffsebenen für die Felder in Java:

  • private
  • Paket-private (Standard, kein Zugriffsmodifikator)
  • protected
  • public

protected erlaubt Unterklassen, andere Klassen in der gleichen p ackage und Mitglieder in der Klasse selbst Zugriff auf die protected Mitglied.

Die kurze Antwort ist, es gibt keine Möglichkeit, genau das zu erreichen, was gewünscht wird.

Für eine Beschreibung dieser vier Zugriffsmodifizierer enthält Controlling Access to Members of a Class von The Java Tutorials genauere Informationen.

+0

Das ist bedauerlich. :( –

1

Nein, es gibt keine access modifier genau das zu tun. Der Modifikator protected ist der nächste Punkt, der jedoch das Feld jeder Klasse im selben Paket sowie Unterklassen (in oder aus demselben Paket) zugänglich macht.

2

Wenn Sie die Codebasis steuern, können Sie immer steuern, was in das Paket mit der Basisklasse einfließt. Wenn es nur in seinem Paket vorhanden ist, können nur Unterklassen auf das Element zugreifen, das außer Subklassen privat bleiben soll.

+0

Dies ist eine ziemlich gute Problemumgehung. Al-thou es beantwortet nicht die Frage von gibt es einen Modifikator wie das (was es nicht gibt), aber bietet erforderliche Funktionalität. – PSIXO

0

Nicht möglich. U kann Ihre Variablen weiterhin als privat deklarieren und dann öffentliche Methoden deklarieren, die die Variablen in der Oberklasse modifizieren. Sie rufen dann die öffentliche Methode für die Variable auf.

Verwandte Themen