# data[].attributes.body
Amistoso (“Friendly”) Cuando no se especifica ningún modificador de acceso se dice que se tiene un acceso por default, esto es, un miembro con acceso   por defecto proporciona  a  otras  clases dentro  del mismo paquete,  acceso  a miembros  de clase, también  a clases  dentro  del mismo  directorio, pero  de  cara  a  todas  las  clases  de  fuera  del  paquete,  el miembro  aparenta  ser  privado.

# data[].attributes.body
Si  se  declaran  como protected las  podremos  utilizar  dentro  de  la  clase  y  todas  sus subclases.   Las   variables   y   métodos   declarados protected tienen   las   siguientes características:

Las   subclases   las   heredarán,   independientemente   de que   se encuentren  en  el  mismo  paquete  o  no.   Esto  permite a  una  subclase  acceder  a esos miembros solamente en instancias de la subclase.

# data[].attributes.body
El modificador public no restringe el acceso. Cualquier parte del código puede acceder

a clases, métodos y variables de miembros con éste modificador.

El  modificador  de  acceso  más  sencillo  es public. Todas  las  clases,  en  todos  los

paquetes  tienen  acceso  a  los  miembros  públicos  de  la  clase.  Los  miembros

públicos se declaran sólo si su acceso no produce resultados indeseados si un extraño

los utiliza.

# data[].attributes.body
Restringe el acceso a los miembros de su clase de tal forma que nadie puede acceder a

ese miembro  excepto  a través de los métodos de esa clase.

Otras clases del mismo paquete  (o  mismo  directorio)  no  pueden  acceder  a  miembros private.  Se  utiliza este acceso para declarar miembros que sólo deben ser utilizados por la clase.

# data[].attributes.body
La clase cuyos miembros se heredan se denomina clase base y la clase que hereda esos miembros se denomina clase derivada. Una clase derivada solo puede tener una clase base directa, pero la herencia es transitiva. Si ClassC se deriva de ClassB y ClassB se deriva de ClassA, ClassC hereda los miembros declarados en ClassB y ClassA

Conceptualmente, una clase derivada es una especialización de la clase base. Por ejemplo, si tiene una clase base Animal, podría tener una clase derivada denominada Mammal y otra clase derivada denominada Reptile. Mammal es Animal y Reptile también es Animal, pero cada clase derivada representa especializaciones diferentes de la clase base

# data[].attributes.body
Un constructor de una clase puede llamar por medio de la palabra this a otro constructor previamente definido en la misma clase. En este contexto, la palabra this sólo puede aparecer en la primera sentencia de un constructor.

# data[].attributes.body
Las características que tienen el modificador de acceso protected son más accesibles que las default.

Únicamente lo métodos y las variables se pueden declarar cómo protetec.

Las características de tipo protected de una clase son accesibles desde las clases que heredan.

A l igual que default, proteted permite el acceso a las clases del mismo paquete

# data[].attributes.body
Una clase derivada puede ocultar miembros de clase base si declara los miembros con el mismo nombre y firma. Se puede usar el modificador new para indicar de forma explícita que el miembro no está diseñado para reemplazar al miembro base. No es necesario usar new, pero se generará una advertencia del compilador si no se usa new.

# data[].attributes.body
La clase base forma el medio por el cual la herencia se logra a través de la derivación. Una clase derivada de una clase base hereda tanto datos como comportamiento. Por ejemplo, el vehículo puede ser una clase base a partir de la cual se pueden derivar las clases derivadas automóvil y autobús. Tanto el automóvil como el autobús son vehículos, y cada uno representa sus propias especializaciones de clase base.

# data[].attributes.body
La anotación @Override en Java es utilizada para: Indicar la sobre escritura de un método. Un ejemplo sería: Cuando se crea una interface para la implementación de un objeto en una clase, esta permite sobre escribir  elcomportamiento,funcionalidad del método en la clase que se implementa la interfase.

# data[].attributes.body
Overload en Java, nos referimos a sobrecargar un método, esto lo aplicamos en los constructores de las clases ya que hay veces que necesitamos más de un constructor, y al momento de implementarlo lo que hacemos es ponerle el mismo nombre que los demás pero con distintos parámetros, también es una buena práctica de programación utilizarlo para métodos que en realidad hacen lo mismo, por ejemplo:

Tenemos un método que busca clientes en nuestra base de datos, ese método solo busca clientes por sexo pero necesitamos otro método que aparte de buscar clientes

# data[].attributes.body
El polimorfismo hace referencia a la cualidad por la que un objeto adquiere o puede tener diferentes formas. En Java, el polimorfismo alude al modo en que se pueden crear y utilizar dos o más métodos con el mismo nombre para ejecutar funciones diferentes.

# data[].attributes.body
La sobrecarga de operadores es la forma en que se pueden implementar operadores en tipos definidos por el usuario. Utiliza una lógica personalizada basada en el tipo y la cantidad de argumentos que pasamos.

Usando la sobrecarga de operadores, podemos especificar la implementación de operaciones definidas por el usuario. El azúcar sintáctico es otro término para esto. Los operadores involucrados en la operación pueden ser de tipo estructura o clase definida por el usuario.

# data[].attributes.body
En programación orientada a objetos la sobrecarga se refiere a la posibilidad de tener dos o más funciones con el mismo nombre, pero funcionalidad diferente. Es decir, dos o más funciones con el mismo nombre realizan acciones diferentes. El compilador usará una u otra dependiendo de los parámetros usados.

# data[].attributes.body
Es aquella que tiene atributos que son asimismo referencias a objetos de clases. Estas referencias pueden apuntar a objetos creados por fuera de clase en cuyo caso deberían inicializarse por el constructor de la clase compuesta.