Я всегда сомневаюсь при создании пакетов, я хочу воспользоваться преимуществом ограниченного доступа к пакету, но в то же время я хочу, чтобы похожие классы были разделены на пакеты. Проблема возникает, когда вы понимаете, что пакеты не иерархичны в Java:
Сначала кажется, что пакеты иерархические, но это не так. источник
Представьте, что у меня есть API, определенный с его классами в foo.bar, только те классы, которые нужны клиенту API, являются общедоступными. Затем у меня есть другой пакет с некоторыми внутренними объектами, которые мне нужны в API, определенном в foo.bar.pojos, эти классы должны быть общедоступными, чтобы к ним можно было получить доступ из foo.bar, но это означает, что клиент API также может получить к ним доступ, если пакет foo.bar.pojos импортирован.
Какая общая политика пакетов, которой следует придерживаться?