2015-06-17 8 views
14

This answer zeigt Java Sichtbarkeitsmodifizierer und ihre Bedeutung:Warum hat die Paketsichtbarkeit Vorrang vor der Unterklassensichtbarkeit?

Modifier | Class | Package | Subclass | World 
————————————+———————+—————————+——————————+——————— 
public  | y | y | y  | y 
————————————+———————+—————————+——————————+——————— 
protected | y | y | y  | n 
————————————+———————+—————————+——————————+——————— 
no modifier | y | y | n  | n 
————————————+———————+—————————+——————————+——————— 
private  | y | n | n  | n 

Meine Frage ist, warum alle Subklassen nicht erlaubt Sichtbarkeit bedeutet, dass Sie die Sichtbarkeit für alle anderen Klassen in Ihrem Paket geben müssen? Mit anderen Worten, warum der Java Schöpfer haben es wie diese, im Gegensatz zu:

Modifier | Class | Subclass | Package | World 
————————————+———————+—————————-+——————————+——————— 
public  | y | y | y  | y 
————————————+———————+—————————+——————————+——————— 
no modifier | y | y | y  | n 
————————————+———————+—————————+——————————+——————— 
protected | y | y | n  | n 
————————————+———————+—————————+——————————+——————— 
private  | y | n | n  | n 
+2

Siehe auch: http://programmers.stackexchange.com/questions/205646/in-java-why-were-protected-members-made-accessible-to-classes-of-the-same-packa und http: //programmers.stackexchange.com/questions/238581/why-is-there-no-subclasses-only-access-modifier-in-java – assylias

+0

"... warum haben die Java-Entwickler das so gemacht", IMHO, niemand Hier kann ich antworten. :) –

Antwort

11

ist ein Paket, angeblich geschrieben und von demselben Team aufrechterhalten; Es ist in Ordnung, eine lose Zugriffskontrolle innerhalb eines Pakets zu haben, vorausgesetzt, der Programmierer hat eine genaue Kenntnis des gesamten Codes.

Eine Unterklasse wird oft von jemand anderem geschrieben; Eine strengere Beschränkung der API ist besser.

1

Weil der umgekehrte Weg wie Sie vorschlagen nicht Sinn macht in der Praxis (was ich zugeben, ist nicht so offensichtlich).

Angenommen, Sie haben ein Paket mit einer Basisklasse, die von einem Client (Drittanbieter, anderes Team usw.) erweitert werden soll, sowie anderen Klassen, die mit der Basisklasse (im selben Paket) interagieren. Das ist ein ziemlich häufiger Fall.

Jetzt kann Ihre Basisklasse Elemente/Methoden nur zur Verwendung durch den im Paket bereitgestellten Code enthalten, die jedoch für den Client unerreichbar sein sollen, der die Klasse erweitert.

Das ist einfach mit Paket privaten (Standard) Modifier wie es jetzt ist, aber es wäre unmöglich wenn Sie die Stärke umgeschaltet. Sie würden die Fähigkeit verlieren, Dinge aus Ihren untergeordneten Klassen zu verbergen, während Sie sie weiterhin Ihren Begleitpersonen im Paket zur Verfügung stellen.

Verwandte Themen