private ignorieren

shiroto

Mitglied
Yahoo~
Mir ist da neulich was aufgefallen, was meines erachtens nicht gehen dürfte. Ich zeig euch einfach mal nen Code.
Java:
public class MeineKlasse {
	private int x;
	// mögliche variablen
	// mögliche konstruktoren

	public void meineMethode(MeineKlasse mk) { // die methode könnte auch anders aussehen, wichtig ist dass sie ein objekt der eigenen klasse erwartet
		mk.x++; // das sollte nicht gehen..tuts aber
	}
	// mögliche methoden
}
Wie man sieht wird hier der private-status von x einfach ignoriert. Damit kann ein Objekt einfach in den Variablen eines anderen Objekts der selben Klasse rumpfuschen, was eindeutig gegen das Geheimnisprinzip verstößt.
Da Java aber eigentlich großen Wert auf Strukturiertheit legt frage ich mich: Haben die das einfach vergessen? Oder gibt es einen Grund, dass man das machen darf? Oo
Das ganze funktioniert auch Klassenübergreifend, wenn die Variablen protected und die Klassen in der selben Klassenhierarchie sind. Also meinetwegen:
Java:
public class MeineKlasse {
	protected int x;
	// mögliche variablen
	// mögliche konstruktoren

	public void meineMethode(MeineKlasse2 mk) {
		mk.x++;
	}
	// mögliche methoden
}
Damit könnte man sich schön sein Programm zerschießen, wenn man nicht vorsichtig ist, was in Java schon verdammt schwer ist.
Ist jetzt nicht so, dass meine Welt deswegen zusammenbricht, aber es wundert mich eben.
 

Landei

Top Contributor
Du bist nicht der einzige, der das als Sicherheitsloch empfindet: In Scala gibt es einmal das "normale" [c]private[/c], das sich wie in Java verhält, und dann [c]private[this][/c], das Variablen nur der eigenen Instanz sichtbar macht, so wie es dir vorschwebt. Diese Lösung lässt sich also ohne weiteres auf der JVM realisieren. Über die Gründe, es bei Java wegzulassen, kann man nur spekulieren, ich tippe aber ganz stark auf "ist für Otto-Normalprogrammierer zu kompliziert" (was ich für eine ziemlich arrogante Einstellung halte).
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
temi Private statische Hilfsmethoden Allgemeine Java-Themen 33
G Public oder Private oder Protected Sinn Allgemeine Java-Themen 14
J private and arrays Allgemeine Java-Themen 2
Thallius Warum ist meine private porperty public? Allgemeine Java-Themen 7
J private static final String variable Allgemeine Java-Themen 8
Thallius Wie verstecke ich meinen private Key am besten im Code? Allgemeine Java-Themen 10
N Vererbung Static & private fields - Nicht ganz einfach? Allgemeine Java-Themen 4
L Private Key aus KeyDatei extrahieren Allgemeine Java-Themen 2
C Probleme mit dem Zugriff auf private Methode per reflection Allgemeine Java-Themen 2
C Zugriff auf private Methode per reflection geht nicht mehr Allgemeine Java-Themen 3
G Testcases mit Junit auf private-Methode Allgemeine Java-Themen 7
Z aus private List<???> list eintrag löschen Allgemeine Java-Themen 4
P Private und public Allgemeine Java-Themen 2
tfa Unit-Tests für private Methoden Allgemeine Java-Themen 25
S In Subklasse auf private Variablen zugreifen Allgemeine Java-Themen 4
A Private-Wert eines Objekts auslesen Allgemeine Java-Themen 9
F Javadoc: @value tag nicht für private fields? Allgemeine Java-Themen 11
G per Reflection auf private Klassenattribute zugreifen? Allgemeine Java-Themen 9
M per reflection private attributsnamen auslesen Allgemeine Java-Themen 3
reibi Aufruf eines private Konstruktors Allgemeine Java-Themen 7
J Java Private Edition? Allgemeine Java-Themen 7
M Stärkerer access-modifier als "private"? Allgemeine Java-Themen 17
F Ein interface und private Methoden? Allgemeine Java-Themen 13
S private Vars in abstrakter Klasse nicht in der Unterklasse? Allgemeine Java-Themen 6
S private Instanzvaribalen bei "Innerer-Vererbung" Allgemeine Java-Themen 9
T ungewollter Zugriff auf private Variablen? Allgemeine Java-Themen 3
S private Methoden benutzen Allgemeine Java-Themen 11
G private vs. public JRE Allgemeine Java-Themen 3
Kirby.exe Regex charakter ignorieren Allgemeine Java-Themen 12
kodela Byte Order Mark (BOM) bei readLine() ignorieren Allgemeine Java-Themen 5
OnDemand Zeilenumbruch ignorieren möglich? Allgemeine Java-Themen 1
D Strings vergleichen; Komma ignorieren Allgemeine Java-Themen 3
R ANT Jar Task soll leere Verzeichnisse ignorieren..? Allgemeine Java-Themen 3
P Copiler soll nicht vorhandene Methoden ignorieren Allgemeine Java-Themen 2
G Subclipse + svn:ignore - Ordner manuel ignorieren? Allgemeine Java-Themen 2
M Unterschiede zwischen Groß- und Kleinschreibung ignorieren Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben