В Java есть четыре доступных модификатора доступа для методов:
public
- любой класс может использовать этот метод.
protected
- классы в одном пакете и подклассы в любом пакете могут использовать этот метод.
private
- только этот класс может использовать этот метод.
no modifier
(«пакет приватный») - только классы в одном пакете могут использовать этот метод.
Часто случается, что я хочу иметь полезные методы в суперклассе, которые могут использовать все подклассы. Но другим классам не имеет смысла обращаться к этому методу, и в некотором смысле это нарушит инкапсуляцию.
Поэтому я должен объявить эти полезные методы в суперклассе public
или protected
, который предоставляет их всем остальным классам, по крайней мере, в пакете. Даже если они предназначены только для использования подклассами.
Есть ли причина, по которой subclasses-only
в Java нет модификатора доступа? Это кажется мне очень странным. Я что-то пропустил?
Кроме того, subclasses-only
модификатор доступа также будет полезен, когда вы хотите выставлять переменные только подклассам. Что со мной случается много.