Laden...

Warum hat Java kein richtiges "protected"?

Erstellt von Red_Wraith vor 15 Jahren Letzter Beitrag vor 15 Jahren 3.066 Views
R
Red_Wraith Themenstarter:in
150 Beiträge seit 2006
vor 15 Jahren
Warum hat Java kein richtiges "protected"?

Java hat ja kein richtiges "protected" wie C#, also ein Schlüsselwort, dass den Zugriff auf die eigene Klasse und die Unterklassen einschränkt. Ein "protected" in Java entspricht ja dem "internal" in C#.
Jedes Mal, wenn ich Java programmiere, nervt mich das, weil ich das "C#-protected" essenziell finde. Was haben sich die Entwickler von Java dabei gedacht? Wie soll man ein "C#-protected" in Java realisieren?

343 Beiträge seit 2007
vor 15 Jahren

Also es gab da mal in Java etwas das nannte sich "private protected" und entsprach dem C#-protected. Ist jedoch schon veraltet und existiert nicht mehr (soweit ich weiß).
Ein Schlüsselwort equivalent zum "protected" aus C# gibt es denk ich nicht. Soweit ich informiert bin gibts in Java nur mehr: public, private, protected, default (steht auch so auf Wikipedia)

Lg
Philipp

PS: da bleibt wohl nur noch eine Möglichkeit: zu C# wechseln 😉

[- www.saftware.net -](http://www.saftware.net/)
B
119 Beiträge seit 2005
vor 15 Jahren

Hallo,

da scheinst du etwas falsch verstanden zu haben, da das "protected" aus Java dem "protected internal" aus C# entspricht und zwar stimmt es, dass es kein direktes Äquivalent zum "protected" aus C# gibt, aber das ist meiner Meinung nach auch nicht weiter wichtig, da ein "protected internal" auch seinen Zweck erfüllt.

grüße,
Bernhard

R
Red_Wraith Themenstarter:in
150 Beiträge seit 2006
vor 15 Jahren

da scheinst du etwas falsch verstanden zu haben, da das "protected" aus Java dem "protected internal" aus C# entspricht und zwar stimmt es, dass es kein direktes Äquivalent zum "protected" aus C# gibt, aber das ist meiner Meinung nach auch nicht weiter wichtig, da ein "protected internal" auch seinen Zweck erfüllt.

Hm. Aber "protected internal" hat doch noch einen größeren Zugriffsradius als
"internal"? Laut Microsoft:

internal:
The type or member can be accessed by any code in the same assembly, but not from another assembly.

protected internal:
The type or member can be accessed by any code in the same assembly, or by any derived class in another assembly.

Wie kann dann "protected internal" seinen Zweck erfüllen? Wenn man verhindern will, dass Klassen, die nicht von einer bestimmte Klasse erben, auf diese zugreifen können.

Man sollte ja den Zugriffsradius so gut wie möglich einschränken, oder? Da finde ich die Java-Unterteilung "keine andere Klasse darf reinschauen" (private) und "alle anderen Klassen dürfen reinschauen (public, und in einer einzigen Assembly auch: protected) doch etwas arg grob.
Um auf meine anfängliche Frage zurück zu kommen: Steckt da irgendein tieferer Sinn dahinter, warum das bei Java so gemacht wurde? Irgendwelche OOP-Konzepte vielleicht?

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo Red_Wraith,

bei Java ist der default-Zugriff Package, d.h. dass ein Member mit diesem Zugriff für alle Klassen innerhalb des Packages sichtbar ist. Das liegt vermutlich an der Überlegung, dass Klassen in einem Package ohnehin eng zusammengehören bzw. sogar zusammenarbeiten (und in der Regel auch von ein und derselben Person erstellt werden, so dass diese Person weiß, was sie tut). Das ist eine Designentscheidung.

Wenn du dieses Designentscheidung erstmal akzeptiert hast, ergibt sich in meinen Augen automatisch, dass protected diesen Zugriff erweitert, genauso wie private ihn einschränkt. Eine Notwendigkeit für ein protected ohne Package-Zugriff ergibt sich bei dieser Grund-Designentscheidungen in meinen Augen natürlich nicht.

herbivore