Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Was ist der Unterschied zwischen private, protected und public?

1,312 views
Skip to first unread message

Michael Tschirf

unread,
Jun 21, 2000, 3:00:00 AM6/21/00
to
Kann mir hier jemand bitte kurz erklären was die Vorteile sind wenn ich
Variablen private, protected oder public deklariere?

Danke

Torsten Vaquet

unread,
Jun 21, 2000, 3:00:00 AM6/21/00
to
Es geht darum, von wo diese Routinen aufgerufen werden darf.
public müssen alle Routinen deklariert werden, die von außen erreichbar sein
sollen.
protected und private Routinen können nur innerhalb der Klasse aufgerufen
werden.
Protected Routinen können aber auch von abgeleiteten Klassen benutzt werden.

Es geht einfach darum, nach außen eine definierte Scnittstelle zu verfügung
zu stellen und zu verhindern, daß man selber oder andere sich im inneren
Ablauf einer Klasse zu schaffen machen.

Ähh, ist das verständlich ?


"Michael Tschirf" <Sport...@gmx.at> schrieb im Newsbeitrag
news:8ipsv5$5d6c7$1...@fu-berlin.de...

Christoph Dahlen

unread,
Jun 21, 2000, 3:00:00 AM6/21/00
to
Am 21.06.00, 09:17:28, schrieb "Torsten Vaquet" <vaq...@ess-wowi.de> zum
Thema Re: Was ist der Unterschied zwischen private, protected und
public?:


> Es geht darum, von wo diese Routinen aufgerufen werden darf.
> public müssen alle Routinen deklariert werden, die von außen
erreichbar sein
> sollen.
> protected und private Routinen können nur innerhalb der Klasse
aufgerufen
> werden.
> Protected Routinen können aber auch von abgeleiteten Klassen benutzt
werden.

Und von Klassen des gleichen package.

> > Kann mir hier jemand bitte kurz erklären was die Vorteile sind wenn
ich
> > Variablen private, protected oder public deklariere?

--
Christoph Dahlen, E-Mail: chri...@dahlen.org

Michael Kuß

unread,
Jun 21, 2000, 3:00:00 AM6/21/00
to
Schau mal auf :
http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html

Dort sind die Zugriffsrechte mal kurz erklärt.

mfg
Micha


Michael Tschirf schrieb:


>
> Kann mir hier jemand bitte kurz erklären was die Vorteile sind wenn ich
> Variablen private, protected oder public deklariere?
>

> Danke

--
---------------------------------------------------------------------
Dipl.-Ing. (BA) Michael Kuss phone: +49-30-20631-612
sydios it·solutions gmbh Neue Gruenstrasse 25, 10179 Berlin, Germany
--- http://www.asdis.de/ ------------------ mailto:mk...@asdis.de ---

Konrad Neitzel

unread,
Jun 22, 2000, 3:00:00 AM6/22/00
to de.comp....@list.deja.com
Hallo,

> Kann mir hier jemand bitte kurz erklären was die Vorteile sind wenn ich
> Variablen private, protected oder public deklariere?

Ja.

Mit besten Grüßen,

Konrad Neitzel

Ups ... das reicht Dir nicht? Na gut:

private: Zugriff kann nur von innerhalb der Klasse erfolgen.
protected: Zugriff von abgeleiteten Klassen und allen Klassen im gleichen
Package
public: Zugriff kann von allen Klassen erfolgen.


--
Konrad Neitzel Handy: 0172 / 6893145
Kesselsdorfer Str. 41 Tel: 0351 / 4178760
01159 Dresden Fax: 0351 / 4178762

> -----Ursprüngliche Nachricht-----
> Von: Michael Tschirf [mailto:sport...@gmx.at]
> Gesendet: Mittwoch, 21. Juni 2000 10:08
> An: de.comp....@list.deja.com
> Betreff: Was ist der Unterschied zwischen private, protected und public?
>
>
> Message from the Deja.com forum:
> de.comp.lang.java
> Your subscription is set to individual email delivery
> This message was sent to nei...@neitzel.de
> Deja.com: Best way to buy a PC
> http://www.deja.com/channels/channel.xp?CID=13031
> >
>
> Danke
>
>
>
>
>
> _____________________________________________________________
> Deja.com: Before you buy.
> http://www.deja.com/
> * To modify or remove your subscription, go to
> http://www.deja.com/edit_sub.xp?group=de.comp.lang.java
> * Read this thread at
> http://www.deja.com/thread/%3C8ipsv5%245d6c7%241%40fu-berlin.de%3E
>

Sent via Deja.com http://www.deja.com/
Before you buy.

Hubert Partl

unread,
Jun 23, 2000, 3:00:00 AM6/23/00
to
Michael Tschirf <Sport...@gmx.at> wrote:
> Kann mir hier jemand bitte kurz erklären was die Vorteile sind wenn ich
> Variablen private, protected oder public deklariere?

Ich zitiere aus http://www.boku.ac.at/javaeinf/

Kapselung (Encapsulation, Data Hiding, Java Beans)

Statt der Angabe von public in den obigen Beispielen sind bei Klassen,
Datenfeldern und Methoden jeweils vier verschiedene Angaben möglich:
* public
das Element kann überall angesprochen werden (öffentlich).
* protected
das Element kann nur in Klassen innerhalb desselben Package oder
in Subklassen (siehe Vererbung) angesprochen werden, aber nicht
von fremden Klassen (geschützt).
* (keine Angabe)
das Element kann nur in Klassen innerhalb desselben Package
angesprochen werden, aber nicht von fremden Klassen (default).
* private
das Element kann nur innerhalb dieser Klasse angesprochen werden
(privat).

Es wird dringend empfohlen, bei jeder Klasse genau zu überlegen,
welche Datenfelder und Methoden "von außen" direkt angesprochen werden
müssen und welche nur innerhalb der Klasse oder des Package benötigt
werden. Alles, was nicht für die Verwendung von außen sondern nur für
die Programmierung im Inneren notwendig ist, sollte im Inneren
"verborgen" werden. Dies wird als Encapsulation oder Data Hiding
bezeichnet und hat vor allem die folgenden Vorteile:
* einfache und klare Schnittstelle für die Verwendung dieser Klasse
bzw. ihrer Objekte,
* Sicherung, daß die Datenfelder stets gültige Werte haben,
* weitgehende Unabhängigkeit der internen Programmierung dieser
Klasse von der Programmierung anderer Klassen,
* weitgehende Vermeidung von Programmierfehlern beim Zusammenspiel
zwischen den verschiedenen Klassen und Programmen.

Um ungültige Datenwerte in den Datenfeldern zu vermeiden, ist es
empfehlenswert, alle Datenfelder als private oder protected zu
definieren und eigene public Methoden für das Setzen und Abfragen der
Werte vorzusehen, die schon bei der Speicherung der Daten alle Fehler
verhindern.

Per Konvention ("Java-Beans") sollen diese Methoden Namen der Form
setXxxx und getXxxx haben und nach folgendem Schema definiert werden:

public class ClassName {

private typ xxxx = anfangswert;

public void setXxxx (typ xxxx) {
// Gültigkeit des Wertes kontrollieren
this.xxxx = xxxx;
}

public typ getXxxx() {
return xxxx;
}
}

Bei boolean Datenfeldern soll die Methode isXxxxx statt getXxxxx
genannt werden. Bei Arrays (Feldern) sollen solche Mehtoden sowohl für
das ganze Feld als auch (mit einem int-Parameter für den Index) für
die einzelnen Feldelemente vorhanden sein.

--
Hubert Partl pa...@mail.boku.ac.at
ZID BOKU Wien http://homepage.boku.ac.at/partl/
(-: make laugh not war

Aljoscha Rittner

unread,
Jun 23, 2000, 3:00:00 AM6/23/00
to

"Hubert Partl" <pa...@boku.ac.at> schrieb im Newsbeitrag news:8iv60b$1obe$5...@www.univie.ac.at...

> Michael Tschirf <Sport...@gmx.at> wrote:
>> Kann mir hier jemand bitte kurz erklären was die Vorteile sind wenn ich
>> Variablen private, protected oder public deklariere?
>
> Ich zitiere aus http://www.boku.ac.at/javaeinf/
>
> Kapselung (Encapsulation, Data Hiding, Java Beans)
>
> Statt der Angabe von public in den obigen Beispielen sind bei Klassen,
> Datenfeldern und Methoden jeweils vier verschiedene Angaben möglich:
> * public
> das Element kann überall angesprochen werden (öffentlich).
> * protected
> das Element kann nur in Klassen innerhalb desselben Package oder
> in Subklassen (siehe Vererbung) angesprochen werden, aber nicht
> von fremden Klassen (geschützt).
> * (keine Angabe)
> das Element kann nur in Klassen innerhalb desselben Package
> angesprochen werden, aber nicht von fremden Klassen (default).
> * private
> das Element kann nur innerhalb dieser Klasse angesprochen werden
> (privat).

[...guten Styleguide gesnippt...]

Zwar schließt es die obere Definition nicht aus, prinzipiell darf aber jede
Objektinstanz einer Klasse auch auf "private" - Felder der gleichen Klasse
zugreifen. D.h., man benötigt keine friend - Deklaration wie in C++ (die dort
sowieso noch etwas anders ist). Die Kapselung wird damit, aufgrund der
Vereinfachung, bedingt aufgegeben.


Somit ist folgendes Extrem-Beispiel möglich:

public class Igitt extends Object {
private int baeh = 0;

public Igitt (int baeh) {
this.baeh = baeh;
}

public void myCloneFrom (Igitt from) {
this.baeh = from.baeh;
}

public String toString() {
return "" + i;
}
}

// Irgendwo in main

Igitt i1 = new Igitt(7);
Igitt i2 = new Igitt(3);

i1.cloneFrom(i2);

System.out.println (i1);

Gruß,
Josch.
--
"Multiple exclamation marks," he went on, shaking his head,
"are a sure sign of a diseased mind." (Terry Pratchett, "Eric")

Ingo R. Homann

unread,
Jun 23, 2000, 3:00:00 AM6/23/00
to
Hi!

Nach Korrektur einiger Tippfehler gibt das Programm wie erwartet "3"
aus. Was ist daran "Igitt" und "baeh"?

Ingo

Aljoscha Rittner

unread,
Jun 23, 2000, 3:00:00 AM6/23/00
to

"Ingo R. Homann" <ingo....@uni-bielefeld.de> schrieb:

> Hi!
>
> Nach Korrektur einiger Tippfehler gibt das Programm wie erwartet "3"
> aus. Was ist daran "Igitt" und "baeh"?
>
> Ingo

Die Tippfehler, Witzbold ;-)

Nein, der erlaubte Zugriff einer fremden Objektinstanz auf private-Felder.
(Hab, ich das nicht beschrieben - blätter - such, ja hab' ich).

Mit der clone() - Methode ist es tatsächlich der einzige sinnvolle
Fall, wo man einem privaten Zugriff sogar zustimmen kann, damit fremde
Objekte nicht über public-Methoden auf gekapselte Felder zugreifen können.

Also nicht wirklich igitt (außer meine schlimmen Tippfehler und mein
heutiger Schreibeschwall).

Gruß,
Jos(c)h.


[...das Unten, welches nach oben gehört...]
--
"I heard if you play the NT-4.0-CD backwards, you get a satanic message."
"That's nothing, if you play it forward, it installs NT-4.0"

0 new messages