Kann mir jemand den "Sinn" hinter public, private, protectet und "default" in Java erklären?
Ich blicke nicht so richtig dahinter, da das für mich ein totales wirwar ist, was aus meiner Sicht irgendwie keinen Sinn macht. (Ich komme von c++).
Wenn ich eine Klasse definieren will die öffentlich von einem anderen Paket aus zugreifbar ist, dann muss ich ein "public" vor der Klassendefinition setzten. Soweit so gut, aber warum muss ich, wenn ich Memberfunktionen habe die sich in der "public" Klasse befinden diese auch noch mit "public" declarieren, wenn ich auf sie außerhalb des Pakets zugreifen will ? Ist das nicht total "doppelt" ?
In C++ ist es einfach so, man erstellt eine Klasse mit privatem und öffentlichem bereich. Privat heißt man kann von außerhalb nicht zugreifen, öffentlich heißt man kann es.
Was deckt Java mit public, private, protectet, und "default" also gar kein keyword denn zusätzlich ab, und was ist daran gut ?
2 Antworten
(...) aber warum muss ich, wenn ich Memberfunktionen habe die sich in der "public" Klasse befinden diese auch noch mit "public" declarieren (...)
Wenn du eine (äußere) Klasse als public kennzeichnest, wird sie als Hauptklasse in der Datei gewertet (jede Datei darf zwar mehrere Klassen, aber nur eine Hauptklasse beinhalten).
Wenn alle Elemente in einer Klasse, die als öffentlich markiert wurde, ebenso als öffentlich zugreifbar gewertet werden würden, hättest du weniger Flexibilität im Zugriffsverhalten. Wo würdest du für diese Fälle Helfermethoden oder Felder deklarieren wollen, die vor äußerem Zugriff geschützt sind?
Über die verschiedenen verfügbaren Sichtbarkeitsebenen kannst du modulorientiert entwickeln.
https://www.w3schools.com/java/java_ref_keywords.asp
public
keyword is an access modifier used for classes, attributes, methods and constructors, making them accessible by any other class.
private
keyword is an access modifier used for attributes, methods and constructors, making them only accessible within the declared class.
protected
keyword is an access modifier used for attributes, methods and constructors, making them accessible in the same package and subclasses.
und noch default pakete
https://openbook.rheinwerk-verlag.de/javainsel/03_006.html
ich sehe allerdings kaum ein unterschied zu c++ , ausser das protected .