Разница между модификаторами доступа protected и package в Java заключается в границах видимости объявляемых элементов. 1
Package даёт доступ к полям, методам и классам не только классу, в котором они объявлены, но и всем классам, находящимся в том же самом пакете. 1 Это модификатор доступа по умолчанию, если не указано иное. 1
Protected даёт доступ к полям, методам и классам не только классу, в котором они объявлены, но и всем классам-потомкам, унаследованным от того, где сделано объявление. 1 При этом нельзя получить доступ из несвязанного класса (не наследника и не из того же пакета). 3
Таким образом, package ограничивает доступ только в пределах пакета, в то время как protected позволяет доступ и внутри пакета, и для классов-наследников.