www.mikrocontroller.net

Forum: PC-Programmierung Tortz "private" sichtbar?!


Autor: Maxim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
class Test {
    
    private double x, y;
    
    Test(Test t) {
        this.x = t.x;
        this.y = t.y;
    }
}

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?

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne es nur von C++, da ist es auch so das die eigene Klasse auch 
auf Private zugreifen kann.

Autor: Chris ... (dechavue)
Datum:

Bewertung
0 lesenswert
nicht 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? :
class Test {
    
    private double x, y;
    
    Test(Test t) {
        Test a = null;
        if (irgendwas) a = this;
        else           a = t;  
        
        a.x = a.y;
    }
}

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).

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
private sacehn sind generell inerhalb der gleichen (oder einer 
eingebetteten) Klasse "zugreifbar".

Autor: Mike J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 .. )

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mike J. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
class Punkt {
    
    private double x, y;
    
    setPunkt(Punkt t) {
        this.x = that.t.x;
        this.y = that.t.y;
    }
}
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.