Основные отличия между модификаторами доступа protected и package-private в Java:
- Protected. 13 Члены класса, помеченные этим модификатором, будут доступны в пределах того же пакета и во всех классах-наследниках, независимо от того, в каком пакете они находятся. 1 Это обычно используется в ситуациях, когда нужно предоставить расширяемую функциональность в подклассах. 1
- Package-private (по умолчанию). 1 Члены класса с таким модификатором доступа будут доступны только в пределах того же пакета. 1 Это полезно, когда требуется разделить код на логические модули, но при этом дать доступ к некоторым составляющим модулю другим его частям. 1
Таким образом, protected предоставляет более широкий доступ: к членам класса можно обратиться не только в пределах того же пакета, но и из всех подклассов класса, даже если они находятся в других пакетах. 2