Como sabemos el encapsulamiento es un elemento clave dentro del paradigma de la orientación a objetos en la programación, por ello es muy importante definir la visibilidad de los atributos y métodos, con ello podremos lograr que las cosas solo sean visibles para los elementos que deben acceder a los mismos y evitar comprometer la integridad de las clases y los objetos, de ahí que podamos crear paquetes para clasificar las diferentes clases.
El Concepto de protected
Si bien sabemos que public da acceso a cualquier clase u objeto a los atributos y métodos afectados por este modificador y que private solo le permite a la misma clase y a sus componentes internos acceder a los métodos y atributos, el modificador protected es un poco más amplio pero no llega a ser un pase libre como public.
Entonces al utilizar el modificador de visibilidad protected le daremos acceso a las subclases sin importar el paquete donde se encuentren, pero a otras clases solo podrá darseles acceso si pertenecen al mismo paquete.
Cambiar la Visibilidad
Algo importante que debemos saber es que podemos cambiar la visibilidad de los métodos y atributos de la superclase en su subclase, sin embargo esto tiene una regla y es que no debemos reducir o debilitar dicha visibilidad, es decir, si en nuestra superlcase tenemos un atributo protected, en la subclase lo podemos declarar como public, pero si tenemos un atributo public en la superclase, en la subclase no podemos definirlo como protected, ya que con ello su visibilidad disminuye y esto Java no lo permite.
En el siguiente cuadro vemos las diferencias entre los modificadores de visibilidad disponibles en Java:
Como vemos el modificador protected está a medio camino entre el public y el private, por ello su popularidad, ya que al diseñar y desarrollar aplicaciones modulares podremos establecer un sistema de encapsulamiento más flexible sin necesidad de poner en riesgo los principios de nuestras clases.
Bien con esto finalizamos este tutorial, como vemos Java nos ofrece un sin fin de herramientas que debemos tener en cuenta y aprender a utilizar, con ello podremos lograr los mejores resultados y podremos seguir los paradigmas de la programación orientada a objetos.