public, private, protected und "default access" -

Status
Nicht offen für weitere Antworten.

ulr!ch

Bekanntes Mitglied
Hi JavaGemeinde,

ich habe hier ein paar grundlegende Anfängerfragen:
Bruce Eckels schreibt in 3. Ed. Rev. von "Thinking in Java":
Java uses three explicit keywords to set the boundaries in a class: public, private, and protected. Their use and meaning are quite straightforward. These access specifiers determine who can use the definitions that follow. [...]
Java also has a “default” access, which comes into play if you don’t use one of the aforementioned specifiers. This is usually called package access because classes can access the members of other classes in the same package, but outside of the package those same members appear to be private.

a) Das bedeutet als vier verschiedene Varianten, die in absteigender Performanz so anzuordnen sind?
private -> protected -> "default" access -> public

b) Wenn jetzt z. B. ein JTextField habe, macht es einen Unterschied in der Performanz, ob ich es
- im Konstruktor oder später irgendwo in der Klasse aufrufe?
- ich es mit "private" versehe?
- ich es mit "private static" versehe?

Ehrlich gesagt, verstehe ich die Unterschiede nicht sonderlich gut; hat jemand dazu einen verständlichen Text, der klare Ratschläge gibt?
Danke für alle Hinweise,

by<e Ulrich
 
R

Roar

Gast
a) private -> default -> protected -> public
b) - nö
- nö
- jo
 

ulr!ch

Bekanntes Mitglied
Roar hat gesagt.:
a) private -> default -> protected -> public
b) - nö
- nö
- jo

Thx, für die schnelle Antwort, aber so verstehe ich das nicht.
Wenn private performanter ist als default (siehe a), wieso ist dann b/ 2. Spiegelstrich "nö"?
Kann ich das als static formulieren, ist ja eigentlich nur ein blödes Objekt für die GUI.

Für Anregungen weiterhin dankbar,
by<e Ulrich
 
R

Roar

Gast
hä? was haben zugriffsmodifier mit der performanz zu tun? dein programm wird doch nicht schneller dadurch. die auflistung ist lediglich die sichtbarrkeit in aufsteigender form.

du kannst alles als static formulieren wenn du nix besseres zu tun hast ;)
 

ulr!ch

Bekanntes Mitglied
Roar hat gesagt.:
hä? was haben zugriffsmodifier mit der performanz zu tun? dein programm wird doch nicht schneller dadurch. die auflistung ist lediglich die sichtbarrkeit in aufsteigender form.

Jetzt bin ich aber Buff, baff? :wink: naja, du weißt schon
Guido Krüger schreibt in der 3. Auflage seines "Handbuchs der Java-Programmierung", das übrigens für Leute mit dem schmalen Geldbeutel (Schüler, Studenten & Co) auf der Seite: http://www.javabuch.de/ kostenlos in der html-Version verfügbar ist im Kapitel Performance-Tuning (genauer 49.2.2)
Methoden des Typs final und private werden am schnellsten ausgeführt, insbesondere bei aktiviertem JIT.
Da steht auch eine Tabelle mit den gemittelten Geschwindigkeiten der unterschiedlichen Methodenaufrufe (schau's dir doch mal an).

By<e Ulrich
 
R

Roar

Gast
hmmja klingt logisch, je kleiner der zugriff, desto weniger muss der interpreter nach überschriebenen methoden suchen, aber dass man heutzutage noch große spürbare unterschiede feststellen kann bezweifel ich, da würd ich mir lieber um ein schönes design kümmern als ein paar ns geschwindigkeitsvorteil :)

und *räusper*:
Alle Messungen wurden mit dem JDK 1.2 Beta 4 auf einem PentiumII-266 unter Windows 95 vorgenommen.
:D :) ;)
 

André Uhres

Top Contributor
Die eigentliche Frage ist doch wann man welche Zugriffsbeschränkung wählen sollte.
Hier einige Richtlinien:
private ist für Attribute,
public für public-Methoden,
protected für Hilfsmethoden.
 
B

bygones

Gast
Andre_Uhres hat gesagt.:
Die eigentliche Frage ist doch wann man welche Zugriffsbeschränkung wählen sollte.
Hier einige Richtlinien:
private ist für Attribute,
public für public-Methoden,
protected für Hilfsmethoden.
1. ist klar
2. eine katze ist eine katze ist eine katze :p
3. hä ? wieso protected bei Hilfsmethoden ? was sind Hilfsmethoden ? und warum protected ???
 

André Uhres

Top Contributor
Mit public-Methoden meine ich natürlich Methoden die öffentlich bekannt sein sollen (dachte ihr versteht englisch :lol: ).
Im Gegenstatz dazu stehen Helper-Methoden die immer protected sein müssen wenn die Klasse wiederverwendbar sein soll.
Man kann ja nicht im voraus wissen wie ein Entwickler die Klasse verwenden möchte und welche Methoden er überschreiben muss :wink: .
 
B

bygones

Gast
Andre_Uhres hat gesagt.:
Mit public-Methoden meine ich natürlich Methoden die öffentlich bekannt sein sollen (dachte ihr versteht englisch :lol: ).
ach ne....

Im Gegenstatz dazu stehen Helper-Methoden die immer protected sein müssen wenn die Klasse wiederverwendbar sein soll.
Man kann ja nicht im voraus wissen wie ein Entwickler die Klasse verwenden möchte und welche Methoden er überschreiben muss :wink: .
ich weiß zwar immer noch nicht was du mit Helper Methoden meinst. aber ich stimme dir einfach mal nicht zu ;-)

Man soll den Scope einer Variable / Methode so gering wie möglich halten. D.h. die erste Wahl ist IMMER private. Nur auf Verdacht zu programmieren ob irgendwann vielleicht mal irgendwer welche Methoden braucht bzw überschreibt zeigt eher von schlechtem Design. Es sollen Schnittstellen definiert werden, alle andere Zugriffe werden nicht erlaubt....
 

thE_29

Top Contributor
Das einzige was wirklich fehlt ist "friend"

So wie in C++!

Ich häts heute schon wieder mal gebraucht!

Die Lib kann nur von der Lib verändert werden!

Außer 1 Programm sollte das können, bzw nur 1 Klasse...

Toll?!? Wie mache ich das ... geht net..

Hab ne public Methode geschrieben und die kann jetzt wieder von jedem verwendet werden :((


Wäre für so eine "friend" Einführung in Java 6!
 

Bleiglanz

Gesperrter Benutzer
was bei der Diskussion immer zu kurz kommt und kaum ein Anfänger wirklich kapiert

Fall1: bei einem im stillen Kämmerlein selbst geschrieben Programm (über das man volle Kontrolle hat) und das keinerlei Beziehung zu irgendwas anderem hat ist es fast völlig egal welche modifier man verwendet. man könnte z.B. immer pubic nehmen :)

Die Verwendung von public/private/protected dient hier vor allem der Vermeidung von Fehlern und der Klarheit


Fall2: man programmiert was das ganz oder zu Teilen von anderen genutzt wird. z.B. Klassen, die in zwei oder mehr unabhängigen Projekten gemeinsam genutzt werden (von anderen Programmierern, am anderen Ende der Welt, Jahre später,...)

in dem Fall können diese "anderen Programmierer" alle public Methoden verwenden, man sagt deshalb sie "sind Teil der API" oder auch "öffentlich"; das Problem dabei ist, dass man später an diesen public-Eigenschaften nichts mehr ändern kann, da dann alle "abhängigen" Klassen umgeschrieben und neu kompiliert werden müssen usw. usf

=> deshalb ist es in dem Fall ziemlich wichtig, sich die "Veröffentlichung" einer Methode via public (oder protected) sehr gut zu überlegen
 

André Uhres

Top Contributor
Helper-Methoden sind alle Methoden die in der Klasse sind um irgendwelche Funktionen
dieser Klasse zu implementieren.
Beispiele für eine Dialog-Klasse: buildContents(), buildMenu(), handleOKBtn(), handleSomeBtn(),...

Jetzt will ich z.B. die Funktionalität von handleOKBtn() ändern und den Rest der Klasse
wiederverwenden. Wenn diese Methode private ist, müsste ich die ganze Klasse neu implementieren,
also das Rad neu erfinden.

Andererseits, wenn alle diese Helper-Methoden protected anstatt private sind,
könnte ich einfach die Bedeutung der Methode handleOKBtn() neu definieren und die
ganze Klasse wiederverwenden.

Wenn du Klassen entwickelst die andere benutzen werden, kannst du nie sicher sein
was sie aus der Klasse machen werden. Aber wenn es dein Ziel ist die
Wiederverwendbarkeit zu fördern, dann wird deine Klasse erweiterbar indem du die
Helper-Methoden protected machst. Zudem gibst du vor der Öffentlichkeit keine
Sicherheit preis, weil protected die Benutzer daran hindert die Methode direkt zu
gebrauchen. Andererseits haben diejenigen die von deiner Klasse erben Zugang zu diesen
Helper-Methoden. Allgemein musst du jedoch davon ausgehen dass die Leute, die die
Klasse erweitern, wissen was sie tun. Aber sogar wenn sie es nicht wissen, das Schlimmste
was sie tun können ist dass sie ihre abgeleitete Klasse kaputtmachen.

Zusammenfassend ist es besser private für Attribute zu benutzen - public für
öffentliche (Interface)-Methoden und protected für Helper-Methoden.
Das gibt deiner Klasse einen Maximum an Flexibilität, ohne die Kapselung aufzugeben.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Public ,private,protected Java Basics - Anfänger-Themen 1
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
J Klasse wird als private erkannt obwohl sie public deklariert ist Java Basics - Anfänger-Themen 3
D Klassenvariablen standardmäßig private oder public? Java Basics - Anfänger-Themen 2
B public/private nur 1x schreiben Java Basics - Anfänger-Themen 3
T public-private problem Java Basics - Anfänger-Themen 5
K Kapselung public / private verständis problem Java Basics - Anfänger-Themen 17
N public class -> public method -> variable private? Java Basics - Anfänger-Themen 10
G field public/private wann Java Basics - Anfänger-Themen 11
J Public / Private Keys speichern bzw. lesen? Java Basics - Anfänger-Themen 8
G GUI Controls private oder public Java Basics - Anfänger-Themen 6
G Variablen public oder private? Java Basics - Anfänger-Themen 9
S private public Java Basics - Anfänger-Themen 5
R private / public Frage Java Basics - Anfänger-Themen 7
A public/private/etc. Zusatz weglassen Java Basics - Anfänger-Themen 2
H private anstatt public Java Basics - Anfänger-Themen 2
H public und private Java Basics - Anfänger-Themen 5
A Public/Private und wie importieren? Java Basics - Anfänger-Themen 13
C Kann mir jemand sagen warum public void unzulässig ist? Java Basics - Anfänger-Themen 2
Say public/default Interface Java Basics - Anfänger-Themen 9
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
Denix The public type Main must be defined in its own fileJava(16777541) Java Basics - Anfänger-Themen 13
melaniemueller Datenkapselung Sichtbarkeit public Java Basics - Anfänger-Themen 4
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
S public static boolean Java Basics - Anfänger-Themen 4
Vamecruft Compiler-Fehler public static void zu static String ändern Java Basics - Anfänger-Themen 2
D public ArrayList(Collection<? extends E> c); Java Basics - Anfänger-Themen 2
J Methoden Methoden einer public class AutoCompleteTextField verwenden Java Basics - Anfänger-Themen 14
G Klassen Mit fremder Klasse auf public Methode zugreifen Java Basics - Anfänger-Themen 23
C Was macht `public class ClassName<T extends Comparable<T>>`? Java Basics - Anfänger-Themen 14
Javafan01 Dateiname und Public class Java Basics - Anfänger-Themen 4
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
A Methoden Unterscheid zwischen public und ohne Java Basics - Anfänger-Themen 9
J Frage zu: public static void main (String[]args) Java Basics - Anfänger-Themen 1
L RSA Public Key einlesen Java Basics - Anfänger-Themen 0
K Public Attribute oder getter - funktioniert leider beides hier nicht Java Basics - Anfänger-Themen 5
V Was bewirkt das Schlüsselwort extends in Verbindung mit class bzw. public class ? Java Basics - Anfänger-Themen 2
I Methoden public void paintComponent (Graphics g) Java Basics - Anfänger-Themen 4
M public static int in ActionListener Java Basics - Anfänger-Themen 6
L Was genau macht "public static void" ? Java Basics - Anfänger-Themen 12
B ja ja schon wieder einer mit einer public static void main(string[] args) Frage... Java Basics - Anfänger-Themen 8
D neue public static class variablen in array speichern? Java Basics - Anfänger-Themen 6
T Variablen Getter-Setter vs Public Variable? Java Basics - Anfänger-Themen 5
K modifier public Java Basics - Anfänger-Themen 3
T Wie vergleiche ich die Jahre aus der while Schleife die in ( public class) fuer cbx geschrieben sind Java Basics - Anfänger-Themen 5
W Klassen Fehler bei public void setLabelText(JLabel label, String text) Java Basics - Anfänger-Themen 11
T Java Code Hilfe - public void xxx() Java Basics - Anfänger-Themen 2
T public void - Problem Java Basics - Anfänger-Themen 10
R public static void Rückgabe Java Basics - Anfänger-Themen 5
P Compiler-Fehler public static void main, Grundloses Problem Java Basics - Anfänger-Themen 4
N Java UML: Eine Frage zu public-Variablen Java Basics - Anfänger-Themen 19
P Erste Schritte public oder static oder wie? Java Basics - Anfänger-Themen 7
J public enum? in Java Java Basics - Anfänger-Themen 9
C Erste Schritte felder, die public final sind Java Basics - Anfänger-Themen 6
B main methode ohne public Java Basics - Anfänger-Themen 5
W Frage public protected konstruktor Java Basics - Anfänger-Themen 6
V public Variablen vs Getter + Setter Java Basics - Anfänger-Themen 4
S Frage zu public static Java Basics - Anfänger-Themen 29
J "public int x" - Zugriff von anderer Klasse (selbes Package) nicht möglich?! Java Basics - Anfänger-Themen 4
E Methoden public static void main(String[] args) Java Basics - Anfänger-Themen 9
O Was bedeutet public class value? Java Basics - Anfänger-Themen 3
I Methoden Problem If/Else; Public Void Java Basics - Anfänger-Themen 6
S Warum sind Attribute der Klasse java.awt.Point public? Java Basics - Anfänger-Themen 3
K OOP Attribute von Klasse in die public class übertragen? Java Basics - Anfänger-Themen 7
T Kapselung: public-Methoden in protected-Klassen Java Basics - Anfänger-Themen 3
F public variable erstellen, & darauf zugreifen Java Basics - Anfänger-Themen 12
B Variablen Variablen in try / catch "public" machen? Java Basics - Anfänger-Themen 3
X enum Fehlermeldung "The public type Day must be defined in its own file" Java Basics - Anfänger-Themen 8
B Public boolean einfügen Java Basics - Anfänger-Themen 12
R jLabel lässt sich nicht public setzen?? Java Basics - Anfänger-Themen 15
Hamstinator public static. Gute Idee? Java Basics - Anfänger-Themen 6
-horn- public static double[][][] NAME() nur per RETURN Wertrückgabe möglich? Java Basics - Anfänger-Themen 20
S Public-Klassen und Dateien Java Basics - Anfänger-Themen 5
StickToFreak Fehler mit public class Java Basics - Anfänger-Themen 13
K konstruktur als public definieren Java Basics - Anfänger-Themen 11
StickToFreak public class problem ôÔ Java Basics - Anfänger-Themen 3
H eine als public deklariete Variable wird nicht gefunden Java Basics - Anfänger-Themen 6
T Konstruktor mit oder ohne public-Bezeichner? Java Basics - Anfänger-Themen 4
T Geht so was? public void verkaufe (<X implements Produkt& Java Basics - Anfänger-Themen 8
P immer "public class". ? Java Basics - Anfänger-Themen 4
A kein zugriff auf variable trotz public? Java Basics - Anfänger-Themen 3
C public static void main(String[] args) Java Basics - Anfänger-Themen 6
D Frage zu public static void main. Java Basics - Anfänger-Themen 4
J public class Java Basics - Anfänger-Themen 15
N Wann muss eine Methode - protected sein wann public wann. Java Basics - Anfänger-Themen 5
G Vor oder hinter public static void main. ? Java Basics - Anfänger-Themen 8
G (Anfängerproblem) Problem mit dem Aufruf von public-Methoden Java Basics - Anfänger-Themen 3
O Unterschied zwischen static und public Java Basics - Anfänger-Themen 2
D Zugriff auf attribut anderer Klasse privat/public? Java Basics - Anfänger-Themen 9
B Warum manchmal public class und manchmal nur class Java Basics - Anfänger-Themen 3
A Javadoc nur bei public Klassen? Java Basics - Anfänger-Themen 3
T rotes herz public void paint(Graphics g) Java Basics - Anfänger-Themen 2
G Was ist public static void main(String[] args)? Java Basics - Anfänger-Themen 12
P public enum ";"expected Java Basics - Anfänger-Themen 7
B public und protected Java Basics - Anfänger-Themen 11
G <identifier> expected bei public void final Java Basics - Anfänger-Themen 3
R public Klassen Java Basics - Anfänger-Themen 12
I public Verständnisfrage Java Basics - Anfänger-Themen 5
F Warum sind Interface-Methoden public? Java Basics - Anfänger-Themen 19
C public void keyPressed(KeyEvent e) Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben