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 publiclub 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-onlymodyfikatora dostępu w Javie? Wydaje mi się to bardzo dziwne. Czy coś brakuje?
Również subclasses-onlymodyfikator dostępu byłby przydatny, gdy chcesz wystawiać zmienne tylko na podklasy. Co mi się często zdarza.