W Javie dostępne są cztery modyfikatory dostępu do metod:
public
- każda klasa może korzystać z tej metody.
protected
- klasy w tym samym pakiecie i podklasy w dowolnym pakiecie mogą korzystać z tej metody.
private
- tylko ta klasa może korzystać z tej metody.
no modifier
(„pakiet prywatny”) - tylko klasy w tym samym pakiecie mogą korzystać z tej metody.
Często zdarza się, że chcę mieć użyteczne metody w nadklasie, z których mogą korzystać wszystkie podklasy. Ale dostęp do tej metody nie miałby sensu dla innych klas iw pewnym sensie spowodowałoby to przerwanie enkapsulacji.
Muszę więc zadeklarować te użyteczne metody w nadklasie public
lub protected
, co wystawia je wszystkim pozostałym klasom przynajmniej w pakiecie. Mimo że są przeznaczone wyłącznie do wykorzystania przez podklasy.
Czy istnieje powód, dla którego nie ma subclasses-only
modyfikatora dostępu w Javie? Wydaje mi się to bardzo dziwne. Czy coś brakuje?
Również subclasses-only
modyfikator dostępu byłby przydatny, gdy chcesz wystawiać zmienne tylko na podklasy. Co mi się często zdarza.
źródło
Java pierwotnie miała taki modyfikator. Został napisany,
private protected
ale usunięty w Javie 1.0.Zakładam, że było to wezwanie do oceny, że dodatkowa złożoność nie była warta kosztów.
Każda funkcja językowa ma swój koszt: ucząc ją nowych programistów; w dokumentacji; implementując go w kompilatorze, JVM i narzędziach programistycznych; w uzasadnieniu poprawności programu; w ograniczaniu przyszłej ewolucji języka; i więcej. Funkcje językowe współdziałają ze sobą, potencjalnie z interakcjami N 2 .
Jaki procent programistów Java przeczytał specyfikację języka Java i specyfikację VM? Założę się, że to niewielki procent, który przemawia za jeszcze prostszym językiem ze względu na zrozumiałość i inżynierię produktów, od których możemy polegać
Zaleta tej
private protected
funkcji była niewielka, ponieważ pakiet jest główną jednostką modułowości.źródło
Kontrola dostępu może być wymyślona w wyniku relacji z wyimaginowanym programistą, który pracuje z twoją klasą nad metodami klasowymi i ich właściwościami ...
To jest publiczne ...
To jest prywatne ...
To jest chronione ...
To jest pakiet.
To jest chronione prywatnie ...
źródło
To już istnieje. Jest chroniony
Masz kontrolę nad tym, jakie klasy istnieją w pakiecie. Jeśli w pakiecie nie ma innej klasy, a dana zmienna lub metoda jest chroniona, jest to „tylko podklasa”.
To powiedziawszy, po raz kolejny masz kontrolę nad tym, jakie klasy istnieją w pakiecie. Możesz po prostu nie używać chronionych metod lub zmiennych.
źródło