Tortz "private" sichtbar?!

Gast #1114237
Lesenswert?

1
class Test {
2
    
3
    private double x, y;
4
    
5
    Test(Test t) {
6
        this.x = t.x;
7
        this.y = t.y;
8
    }
9
}

Das ist ein Java-Quellcode. Warum kann ich hier auf x, y von t 
zugreifen, obwohl diese private sind? Ich befinde mich zwar in derselben 
Klasse, aber im anderen Objekt. Warum geht das trotzdem?
#1114255
Lesenswert?

Da bei C++/Java/C# der Zugriffsmodifier für die Klasse nicht für die 
Instanz zählt.

Die Methoden existieren ja nur einmal und bekommen als quasi 
unsichtbaren Parameter die Instanz mit.

Ist so auch am Logischten, weil wass wäre mit folgendem Konstrukt, soll 
das nur funktionieren wenn a==this ist, soll es nie Funktionieren? :
1
class Test {
2
    
3
    private double x, y;
4
    
5
    Test(Test t) {
6
        Test a = null;
7
        if (irgendwas) a = this;
8
        else           a = t;  
9
        
10
        a.x = a.y;
11
    }
12
}

Zudem wäre ohne diese Möglichkeit ein CCTor/eine Kopiermethode in vielen 
Fällen nicht oder nur sehr schwer möglich (und zwar wenn nicht für alle 
Members Setter existieren).
Gast #1115119
Lesenswert?

@ Maxim
Du machst dir aus der Klasse "Test" mittels new ein Obkejt(= Instanz 
einer Klasse).

Dieses Objekt kannst du dir als Haus vorstellen, alles was in dem Haus 
ist und was als privat eingestuft wurde kann man von außen nicht 
erreichen.

Also die Zugrifsmodifier gelten nur für jemanden der von außen auf das 
Objekt zugreifen möchte.

Stell dir vor du erstellst in deinem objekt eine Variable auf die du 
nicht zugreifen kannst ... das ist doch sinnlos.

(Wenn du deinen Wasserzähler in deinem Haus als public deklarierst kann 
der Versorger den Wert ablesen wann er will, er kann ihn aber auch 
einstellen wenn er mehr von dir kassieren möchte :( )

{c]
class Test {

    private double x, y;

    Test(Test t) {
        this.x = t.x;
        this.y = t.y;
    }

    // hier können andere Methoden -lesend- auf x zugreifen
    public getX(){
        return this.x;
    }
}
{/c]

Wenn du sie mit "public" freigibst ist deine Variable Freiwild und jeder 
kann mit ihr alles machen.


Achso ..
die Variablen sind (rotes Haus, 14cm Dämmung) also Eigenschaften und
die Methoden sind so etwas wie  (heizen, lüften .. )
#1115182
Lesenswert?

Mike J. wrote:

Du hast die Frage nicht verstanden

> Dieses Objekt kannst du dir als Haus vorstellen, alles was in dem Haus
> ist und was als privat eingestuft wurde kann man von außen nicht
> erreichen.

Genau. Und um in deinen Begriffen zu bleiben lautet die Frage:
Warum kann dann zwar nicht der Ableser zugreifen, wohl aber ein anderes 
Haus?

Und die Antwort darauf lautet, wie weiter oben schon festgestellt: Weil 
das Schutzkonzept pubilc/protected/private auf Klassenebene arbeitet und 
nicht auf Objektebene.
Gast #1116876
Lesenswert?

@ kbuchegg
Oh ... naja, okay.

Die Variable "private static int i; " ist doch eine Klassenvariable und 
wird auch mit private/public/protected/package geschützt.

er sagte jedenfalls:
> Warum kann ich hier auf x, y von t zugreifen,
> obwohl diese private sind?
Er hätte vielleicht ein paar andere Namen vergeben sollen:
1
class Punkt {
2
    
3
    private double x, y;
4
    
5
    setPunkt(Punkt t) {
6
        this.x = that.t.x;
7
        this.y = that.t.y;
8
    }
9
}
Das steht alles am Anfang eines jeden Javabuchs, aber das überlesen die 
meisten und blättern vor zur grafischen Oberfläche.

> Ich befinde mich zwar in derselben Klasse, aber im anderen Objekt.

Dann dachte ich mir dass er sich nicht im klaren ist dass er die Klasse 
kopiert und davon Objekte erzeugt.
... und irgendwie hätte er das schön geordnet und viel besser aus einem 
Buch entnehmen können, mit Beispieltexten.

http://www.galileocomputing.de/

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren