a) por todas as classes do mesmo pacote em que foi declarado.
default ou pacote
b) por qualquer outra classe, além daquela a que pertence.
public
c) pela classe a que pertence, de forma exclusiva.
private
d) pela classe em que foi declarado e suas subclasses, e por membros de outras classes no mesmo pacote.
protected
public (Como se fosse um telefone público, qualquer um acessa)
Uma declaração com o modificador public pode ser acessada de qualquer lugar e por qualquer entidade que possa visualizar a classe a que ela pertence.
private (Como se fosse um telefone celular, somente o dono acessa(a própria classe)
Os membros da classe definidos como private não podem ser acessados ou usados por nenhuma outra classe. Esse modificador não se aplica às classes, somente para seus métodos e atributos. Esses atributos e métodos também não podem ser visualizados pelas classes herdadas.
protected (Como se fosse um telefone fixo em casa, somente o dono e as pessoas daquela família podem usar)
O modificador protected torna o membro acessível às classes do mesmo pacote ou através de herança, seus membros herdados não são acessíveis a outras classes fora do pacote em que foram declarados.
default (padrão):
A classe e/ou seus membros são acessíveis somente por classes do mesmo pacote, na sua declaração não é definido nenhum tipo de modificador, sendo este identificado pelo compilador.
Fontes:
https://www.devmedia.com.br/metodos-atributos-e-classes-no-java/25404
Curso em vídeo com Guanabara.