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.