Java Eclipse Zugriff auf private Variablen ohne getter

_Andi91

Cadet 1st Year
Registriert
Jan. 2010
Beiträge
13
Hi,

hab grade gesehen, dass ich in einer meiner Sourcen auf ein private(!) Attribut eines Objektes ohne getter zugegriffen hab. (Nein es ist nicht das Attribut der eigenen Instanz).
Wie kann das möglich sein?
Macht Eclipse dass dann automatisch evtl beim compilen dass dann doch wieder mit getter drauf zugegriffen wird??

Beispiel:

Code:
public class TestClass 
{
	private String test = null;
	
	public TestClass()
	{
		TestClass testInstance = new TestClass();
		System.out.println(testInstance.test);
	}
}

Bringt keinen Compilerfehler!?
Oder spinn ich etz grad irgendwie...

mfg
 
die eigene klasse kennt doch die variablen innerhalb des eigenen objekts. funktioniert in c++ auch, frag mich aber bitte nicht wie man das am besten erklärt bzw. unter welchem stichwort man da sucht.
 
ja aber es ist ja nicht das gleiche Objekt/Instanz der Klasse...
Es ist aber irgendwie komisch weil "test" in der Zeile System.out.println(testInstance.test);
in blauer Schrift da steht. Das bedeutet in Eclipse eigentlich dass es eine Membervariable der aktuellen Instanz ist. Also greift er dabei vielleicht doch auf sein eigenes Attribut zu?

Was du meinst lässt sich mit Sichtbarkeiten erklären (d.h. private, public, protected, package)

irgendwie komische Sache...
 
nein das mein ich nich. in c++ kann ich deinen beispielcode analog übernehmen und er funktioniert genauso. die sachen benutzt man u.a. bei operatorüberladungen und damit man nicht 100erte überflüssige getter und setter schreiben müsste, kann man direkt auf die membervariablen von verschiedenen objekten der gleichen klasse zugreifen.
Code:
class Test
{
  private :
    bool TestVariable;
  
  public :
    bool Test::operator ==( Test &TestKlasse )
    {
      return this->TestVariable == TestKlasse.TestVariable;
    }
};
funktioniert z.b. anstandslos in c++.
 
Zuletzt bearbeitet: (klasse ausgeschrieben)
Die Zugriffsmodi private/protected/public sind in Java auf Klassenebene angesiedelt, nicht auf Objektebene. D.h. auf eine private Variable in einem Objekt der Klasse TestClass kann auch aus allen anderen Objekten derselben Klasse heraus zugegriffen werden.

Inwiefern das gut und im Sinne der objekt(!)-orientierten Programmierung ist, steht auf einem anderen Blatt - aber es ist halt so ^^
 
Tatsächlich funktioniert es sogar so:

Code:
public class Outer{

	public class Inner{
		private int var = 0;
	}

	private Inner iCls = new Inner();

	public Outer(){
		iCls.var++;
	}
}
 
Zurück
Oben