Um membro especificado como protected pode ser acessado dentro de seu pacote e por todas as subclasses, inclusice subclasses de outros pacotes.
Membros declarados explicitamente como public podem ser vistos em todos os locais, inclusive classes e pacotes diferentes, pois não há restrição quanto ao seu uso ou acesso.
Um membro private só pode ser acessado por outros membros de sua classe. Ele não é afetado por sua associação a um pacote.
Fonte: Java para Iniciantes 6º Edição