Pilares
La POO tiene varios pilares para asegurar la simplicidad de código y su reutilización, y aunque diversos autores señalan diversos pilares, en este documento se considerarán los cuatro que son comunes en la mayoría de textos, estos son: Abstracción, Encapsulamiento, Herencia y Polimorfismo, las dos primeras están más relacionadas con la búsqueda de códigos simples y las dos siguientes con la reutilización.
Abstracción |
Es el pilar de la POO, que permite identificar las características y comportamientos de un objeto y con los cuales se construirá la clase (plantilla). Esto quiere decir que a través de este pilar o fundamento es posible reconocer los atributos y métodos de un objeto.
La imagen muestra en texto de color negro algunas de las características del objeto: color, tamaño, marca, son características porque todos los controles pueden tenerlas y cada objeto de este tipo tomará valores que le identifiquen; el objeto de la imagen tiene los siguientes valores:
color: negro
tamaño: 15
marca: samsung
De igual forma, se identifican los comportamientos que en la imagen aparecen como textos de color blanco
Encapsulamiento |
Es la característica de la POO que permite el ocultamiento de la complejidad del código, pertenece a la parte privada de la clase y que no puede ser vista desde ningún otro programa.
En el gráfico se representa como la complejidad del código queda oculta dentro de una caja fuerte impidiendo que quien lo utilice sin observar los detalles de cada una de las líneas que permiten el cumplimiento de una acción específica.
En realidad, el encapsulamiento está relacionado con el acceso a un código desde el código de otra clase; sin embargo en términos generales, esta representación gráfica es conveniente para comprender el concepto de encapsulamiento.
Herencia |
Es el pilar más fuerte que asegura la reutilización de código, ya que a partir de esta característica es posible reutilizar (heredar) las características y comportamientos de una clase superior llamada clase padre, a sus clases hijas, denominadas clases derivadas. Esto implica que una vez desarrollado el código de una clase base, su código puede ser reutilizado por las clases derivadas.
En el gráfico, Persona es la clase Padre, que tiene como características: CI, nombre, dirección, fechaNac, genero, entre otros; y Estudiante y Profesor son las clases "Hijas", que heredan las características de la clase padre y a su vez establecen las propias de su clase. Esto implica que no se deberán volver a definir, sino que por el simple hecho de heredarlas ya es posible utilizarlas y en el caso de los comportamientos ejecutarlos o modificarlos si es necesario.
Los métodos con valor de retorno se clasifican en dos tipos:
Este tipo de métodos no reciben datos de entrada; pero de igual forma retornan un resultado al punto donde son llamados.
Su definición es de la siguiente manera:
tipo nombreMetodo(){
Declaracion de variables locales
Cuerpo del método
return valor;
}
Donde:
variable = nombreMetodo();
Donde:
2. Métodos con valor de retorno con parámetros
Este tipo de métodos reciben datos de entrada por medio de parámetros y retornan un resultado al pundo de su llamado.
Su definición es de la siguiente manera:
tipo nombreMetodo(tipo1 p, tipo2 q, tipo3 r, ...){
Declaración de variables locales
Cuerpo del método
return valor;
}
Donde:
tipo: Es el tipo de valor de retorno.
p, q, r, ... : son los nombres de los parámetros.
tipo1, tipo2, tipo3, ... : son los tipos de datos de los parámetros.
valor: es el valor de retorno.
Invocación (llamado):
variable = nombreMetodo(v1, v2, v3, ...);
Donde:
variable: Es el nombre del método llamado.
v1, v2, v3, ... : Son los valores dados a los parámetros.
Los métodos con valor de retorno se clasifican en dos tipos:
Este tipo de métodos no reciben datos de entrada; pero de igual forma retornan un resultado al punto donde son llamados.
Su definición es de la siguiente manera:
tipo nombreMetodo(){
Declaracion de variables locales
Cuerpo del método
return valor;
}
Donde:
variable = nombreMetodo();
Donde:
2. Métodos con valor de retorno con parámetros
Este tipo de métodos reciben datos de entrada por medio de parámetros y retornan un resultado al pundo de su llamado.
Su definición es de la siguiente manera:
tipo nombreMetodo(tipo1 p, tipo2 q, tipo3 r, ...){
Declaración de variables locales
Cuerpo del método
return valor;
}
Donde:
tipo: Es el tipo de valor de retorno.
p, q, r, ... : son los nombres de los parámetros.
tipo1, tipo2, tipo3, ... : son los tipos de datos de los parámetros.
valor: es el valor de retorno.
Invocación (llamado):
variable = nombreMetodo(v1, v2, v3, ...);
Donde:
variable: Es el nombre del método llamado.
v1, v2, v3, ... : Son los valores dados a los parámetros.
Los métodos con valor de retorno se clasifican en dos tipos:
Este tipo de métodos no reciben datos de entrada; pero de igual forma retornan un resultado al punto donde son llamados.
Su definición es de la siguiente manera:
tipo nombreMetodo(){
Declaracion de variables locales
Cuerpo del método
return valor;
}
Donde:
variable = nombreMetodo();
Donde:
2. Métodos con valor de retorno con parámetros
Este tipo de métodos reciben datos de entrada por medio de parámetros y retornan un resultado al pundo de su llamado.
Su definición es de la siguiente manera:
tipo nombreMetodo(tipo1 p, tipo2 q, tipo3 r, ...){
Declaración de variables locales
Cuerpo del método
return valor;
}
Donde:
tipo: Es el tipo de valor de retorno.
p, q, r, ... : son los nombres de los parámetros.
tipo1, tipo2, tipo3, ... : son los tipos de datos de los parámetros.
valor: es el valor de retorno.
Invocación (llamado):
variable = nombreMetodo(v1, v2, v3, ...);
Donde:
variable: Es el nombre del método llamado.
v1, v2, v3, ... : Son los valores dados a los parámetros.
public class Estudiante
{
private String nombre;
private String apellido;
private String correo;
public String getNombre()
{
return nombre;
}
public void setNombre(String nombre)
{
this.nombre = nombre;
}
public String getApellido()
{
return apellido;
}
public void setApellido(String apellido)
{
this.apellido = apellido;
}
public String getCorreo()
{
return correo;
}
public void setCorreo(String correo)
{
this.correo = correo;
}
}
Y en el main la implementación sería:
public class Principal
{
public static void main(String args[])
{
Estudiante estudiante1 = new Estudiante();
// Ingreso los datos con los Setter a la nueva instancia de
// Estudiante, estos datos pueden ingresarse desde teclado
// o a través de una GUI
estudiante1.setNombre("María");
estudiante1.setApellido("Paucar");
estudiante1.setCorreo("maria.paucar@epn.edu.ec");
// Para obtener los datos uso los Getter
// y los podemos imprimir en Consola o a una GUI
System.out.println(estudiante1.getNombre());
System.out.println(estudiante1.getApellido());
System.out.println(estudiante1.getCorreo());
}
}
Ir a la navegaciónIr a la búsqueda
Polimorfismo |
A través de esta característica es posible definir varios métodos o comportamientos de un objeto bajo un mismo nombre, de forma tal que es posible modificar los parámetros del método, o reescribir su funcionamiento, o incrementar más funcionalidades a un método.
En el gráfico se observa que todas son figuras geométricas por lo que pueden incluirse en una clase Padre, por lo que la clase deberá tener el método Área(), este método podrá ser reescrito tantas veces como figuras existan, con los parámetros correspondientes en cada clase derivada: Circulo, Triangulo y Rectángulo, o reescrita en la clase base.
¿Qué son las clases en Java?
En informática, una clase es una plantilla para la creación de objetos de datos según un modelo predefinido. Las clases se utilizan para representar entidades o conceptos, como los sustantivos en el lenguaje. Cada clase es un modelo que define un conjunto de variables -el estado, y métodos apropiados para operar con dichos datos -el comportamiento. Cada objeto creado a partir de la clase se denomina instancia de la clase.
Las clases de objetos son un pilar fundamental de la programación orientada a objetos. Permiten abstraer los datos y sus operaciones asociadas al modo de una caja negra. Los lenguajes de programación que soportan clases difieren sutilmente en su soporte para diversas características relacionadas con clases. La mayoría soportan diversas formas de herencia. Muchos lenguajes también soportan características para proporcionar encapsulación, como especificadores de acceso.
ATRIBUTOS O PROPIEDADES DE UNA CLASE
Como mencioné anteriormente un clase es una plantilla de la cual se puede crear objetos, un clase debe implementar sus características que se les conoce como propiedades o atributos, imaginemos que estamos diseñando un clase que va permitir crear objetos de tipo vehículos, no todos los vehículos van a tener las mismas características, es posible que existan vehículos de color rojo, azul, blanco etc, este tipo de características las definimos como atributos o propiedades de una clase.
Puesto que los atributos de una clase guardan datos deben definir el tipo de dato que van almacenar, por ejemplo, int, boolean, long, byte, char, etc. o algún tipo de dato definido por el programador que puede ser un objeto.
La implementación de los atributos de una clase se pueden ver como sigue:
1
2
3
4
|
class Vehiculo{
String color;
float motor;
}
|
MÉTODOS DE UNA CLASE
Una clase también implementa un comportamiento, siguiendo el ejemplo de la clase vehículo este puede tener varios comportamientos como por ejemplo: arrancar, frenar, parar etc., el comportamiento de una clase se define con la creación de métodos, un método debe contener el tipo de retorno + nombre del método (se recomienda que este siempre sea en verbo) + apertura y cierre de paréntesis a continuación la apertura y cierre de llaves donde internamente estará el cuerpo del método.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class Vehiculo{
String color;
float motor;
public void arrancar(){
}
public int frenar(){
return 1;
}
public void frenar(int param1, string param2){
}
}
|
Un método puede también contener argumentos o parámetros los mismos que debe ir dentro de los paréntesis, cada argumento debe tener definido su tipo y de haber varios deben estar separados por comas.
En el ejemplo para comparar puse una analogía con el caso de una clase vehículo pero ya en la práctica se puede usar por ejemplo una clase llamada CuentaBancaria que por ejemplo puede tener como atributos el tipo de cuenta, nombre del beneficiario y comportamiento como por ejemplo realizarDeposito(), realizarRetiro(), todo dependerá de los requerimientos que tengamos.
Parámetros y argumentos (programación): Un argumento o parámetro es el medio a partir del cual podemos expandir el ámbito de variables locales de funciones, hacia otras funciones y además quienes nos permiten establecer comunicaciones entre funciones. Si nos vemos ante la necesidad de visualizar o modificar el valor de una variable local en otra función que llamaremos, debemos invocar a dicha función haciendo referencia de su nombre, seguido de los parámetros o nombres de variables para las cuales, en teoría ampliaríamos su ámbito.
Las palabras parámetro y argumento, aunque de significado similar, tiene distintas connotaciones semánticas: Se denominan parámetros los tipos declarados en el prototipo (que deben corresponder con los declarados en la definición). Cuando se realiza una llamada a la función, los "valores" pasados se denominan argumentos. A veces se utilizan también las expresiones argumentos formales, para los parámetros y argumentos actuales para los valores pasados.
Parámetros (en prototipo o definición) argumentos formales
Valores pasados (en tiempo de ejecución) argumentos actuales
Métodos con valor de retorno
Los métodos con valor de retorno son módulos de programa que pueden recibir datos de entrada por medio de variables locales (parámetros) y posteriormente retorna un resultado al punto donde es llamado. Este tipo de métodos se utiliza para operar cualquier tipo de proceso que produzca un resultado.
Los métodos con valor de retorno se clasifican en dos tipos:
- Métodos con valor de retorno sin parámetros.
- Métodos con valor de retorno con parámetros.
Este tipo de métodos no reciben datos de entrada; pero de igual forma retornan un resultado al punto donde son llamados.
Su definición es de la siguiente manera:
tipo nombreMetodo(){
Declaracion de variables locales
Cuerpo del método
return valor;
}
Donde:
- valor: Es el valor que es retornado por el método.
- tipo: Es el tipo del valor de retorno.
variable = nombreMetodo();
Donde:
- variable: Es la variable que recibe el valor retornado por el método.
2. Métodos con valor de retorno con parámetros
Este tipo de métodos reciben datos de entrada por medio de parámetros y retornan un resultado al pundo de su llamado.
Su definición es de la siguiente manera:
tipo nombreMetodo(tipo1 p, tipo2 q, tipo3 r, ...){
Declaración de variables locales
Cuerpo del método
return valor;
}
Donde:
tipo: Es el tipo de valor de retorno.
p, q, r, ... : son los nombres de los parámetros.
tipo1, tipo2, tipo3, ... : son los tipos de datos de los parámetros.
valor: es el valor de retorno.
Invocación (llamado):
variable = nombreMetodo(v1, v2, v3, ...);
Donde:
variable: Es el nombre del método llamado.
v1, v2, v3, ... : Son los valores dados a los parámetros.
Métodos con valor de retorno
Los métodos con valor de retorno son módulos de programa que pueden recibir datos de entrada por medio de variables locales (parámetros) y posteriormente retorna un resultado al punto donde es llamado. Este tipo de métodos se utiliza para operar cualquier tipo de proceso que produzca un resultado.
Los métodos con valor de retorno se clasifican en dos tipos:
- Métodos con valor de retorno sin parámetros.
- Métodos con valor de retorno con parámetros.
Este tipo de métodos no reciben datos de entrada; pero de igual forma retornan un resultado al punto donde son llamados.
Su definición es de la siguiente manera:
tipo nombreMetodo(){
Declaracion de variables locales
Cuerpo del método
return valor;
}
Donde:
- valor: Es el valor que es retornado por el método.
- tipo: Es el tipo del valor de retorno.
variable = nombreMetodo();
Donde:
- variable: Es la variable que recibe el valor retornado por el método.
2. Métodos con valor de retorno con parámetros
Este tipo de métodos reciben datos de entrada por medio de parámetros y retornan un resultado al pundo de su llamado.
Su definición es de la siguiente manera:
tipo nombreMetodo(tipo1 p, tipo2 q, tipo3 r, ...){
Declaración de variables locales
Cuerpo del método
return valor;
}
Donde:
tipo: Es el tipo de valor de retorno.
p, q, r, ... : son los nombres de los parámetros.
tipo1, tipo2, tipo3, ... : son los tipos de datos de los parámetros.
valor: es el valor de retorno.
Invocación (llamado):
variable = nombreMetodo(v1, v2, v3, ...);
Donde:
variable: Es el nombre del método llamado.
v1, v2, v3, ... : Son los valores dados a los parámetros.
Métodos con valor de retorno
Los métodos con valor de retorno son módulos de programa que pueden recibir datos de entrada por medio de variables locales (parámetros) y posteriormente retorna un resultado al punto donde es llamado. Este tipo de métodos se utiliza para operar cualquier tipo de proceso que produzca un resultado.
Los métodos con valor de retorno se clasifican en dos tipos:
- Métodos con valor de retorno sin parámetros.
- Métodos con valor de retorno con parámetros.
Este tipo de métodos no reciben datos de entrada; pero de igual forma retornan un resultado al punto donde son llamados.
Su definición es de la siguiente manera:
tipo nombreMetodo(){
Declaracion de variables locales
Cuerpo del método
return valor;
}
Donde:
- valor: Es el valor que es retornado por el método.
- tipo: Es el tipo del valor de retorno.
variable = nombreMetodo();
Donde:
- variable: Es la variable que recibe el valor retornado por el método.
2. Métodos con valor de retorno con parámetros
Este tipo de métodos reciben datos de entrada por medio de parámetros y retornan un resultado al pundo de su llamado.
Su definición es de la siguiente manera:
tipo nombreMetodo(tipo1 p, tipo2 q, tipo3 r, ...){
Declaración de variables locales
Cuerpo del método
return valor;
}
Donde:
tipo: Es el tipo de valor de retorno.
p, q, r, ... : son los nombres de los parámetros.
tipo1, tipo2, tipo3, ... : son los tipos de datos de los parámetros.
valor: es el valor de retorno.
Invocación (llamado):
variable = nombreMetodo(v1, v2, v3, ...);
Donde:
variable: Es el nombre del método llamado.
v1, v2, v3, ... : Son los valores dados a los parámetros.
Setters & Getters
Los Setters & Getters son métodos de acceso lo que indica que son siempre declarados públicos, y nos sirven para dos cosas:
Setters: Del Inglés Set, que significa establecer, pues nos sirve para asignar un valor inicial a un atributo, pero de forma explícita, además el Setter nunca retorna nada (Siempre es void), y solo nos permite dar acceso público a ciertos atributos que deseemos el usuario pueda modificar.
Getters: Del Inglés Get, que significa obtener, pues nos sirve para obtener (recuperar o acceder) el valor ya asignado a un atributo y utilizarlo para cierto método.
Entonces veamos en un ejemplo, si tenemos una Clase de nombre Estudiante, cómo serían sus Setters & sus Getters?
public class Estudiante
{
private String nombre;
private String apellido;
private String correo;
public String getNombre()
{
return nombre;
}
public void setNombre(String nombre)
{
this.nombre = nombre;
}
public String getApellido()
{
return apellido;
}
public void setApellido(String apellido)
{
this.apellido = apellido;
}
public String getCorreo()
{
return correo;
}
public void setCorreo(String correo)
{
this.correo = correo;
}
}
Y en el main la implementación sería:
public class Principal
{
public static void main(String args[])
{
Estudiante estudiante1 = new Estudiante();
// Ingreso los datos con los Setter a la nueva instancia de
// Estudiante, estos datos pueden ingresarse desde teclado
// o a través de una GUI
estudiante1.setNombre("María");
estudiante1.setApellido("Paucar");
estudiante1.setCorreo("maria.paucar@epn.edu.ec");
// Para obtener los datos uso los Getter
// y los podemos imprimir en Consola o a una GUI
System.out.println(estudiante1.getNombre());
System.out.println(estudiante1.getApellido());
System.out.println(estudiante1.getCorreo());
}
}
TIPOS DE MÉTODOS
Un método es una abstracción de una operación que puede hacer o realizarse con un objeto. Una clase puede declarar cualquier número de métodos que lleven a cabo operaciones de lo más variado con los objetos. En esta sección los métodos se clasifican en dos grupos: los métodos de instancia y los métodos de clase.
14.1 MÉTODOS DE INSTANCIA
Las clases pueden incluir en su declaración muchos métodos o no declarar ninguno. Los métodos pueden clasificarse en métodos de instancia y métodos de clase.
Los métodos de instancia operan sobre las variables de instancia de los objetos pero también tienen acceso a las variables de clase. La sintaxis de llamada a un método de instancia es:
// Llamada tipica a un metodo de instancia
idReferencia.idMetodo(parametros);
Todas las instancias de una clase comparten la misma implementación para un método de instancia. La instancia que hace la llamada al método es siempre un parámetro o argumento implícito. Dentro de un método de instancia, el identificador de una variable de instancia hace referencia al atributo de la instancia concreta que hace la llamada al método (suponiendo que el identificador del atributo no ha sido ocultado por el de un parámetro).
En el ejemplo anterior en la declaración de la clase
CuentaBancaria
, los métodos saldo
y transferencia
son métodos de instancia.public double saldo() {
return this.saldo;
}
public void transferencia( CuentaBancaria origen ) {
this.saldo += origen.saldo;
origen.saldo = 0;
}
Ejemplos de llamada a estos métodos dentro de
PruebaCuentaBancaria
:CuentaBancaria c1 = new CuentaBancaria();
CuentaBancaria c2 = new CuentaBancaria(20.0);
c1.transferencia(c2);
System.out.println("Cuenta con: " + c1.saldo() + " euros");
14.2 MÉTODOS DE CLASE
En principio, los métodos de clase no operan sobre las variables de instancia de los objetos. Los métodos de clasepueden trabajar con las variables de clase pero no pueden acceder a las variables de instancia declaradas dentro de la clase, a no ser que se crea una nueva instancia y se acceda a las variables de instancia a través del nuevo objeto. Los métodos de clase también pueden ser llamados precediendolos con el identificador de la clase, sin necesidad de utilizar el de una instancia.
IdClase.idMetodo(parametros); // Llamada tipica a un metodo de clase
La palabra
static
determina la declaración de un método de clase. Por defecto, si no se indica la palabra static
, el método declarado se considera un método de instancia.
En el ejemplo anterior en la declaración de la clase
CuentaBancaria
, el método incCuentas
es un método de clase.public static void incCuentas () {
totalCuentas++;
}
Un ejemplo de llamada a este método dentro de
PruebaCuentaBancaria
sería:CuentaBancaria.incCuentas();
Las diferencias entre los métodos de instancia y los de clase se resumen aquí:
Constructor (informática)
En programación orientada a objetos (POO), un constructor es una subrutina cuya misión es inicializar un objeto de una clase. En el constructor se asignan los valores iniciales del nuevo objeto.
Se utiliza para crear tablas de clases virtuales y poder así desarrollar el polimorfismo, una de las herramientas de la programación orientada a objetos. Al utilizar un constructor, el compilador determina cual de los objetos va a responder al mensaje (virtual) que hemos creado. Tiene un tipo de acceso, un nombre y un paréntesis.
Java[editar]
En Java es un método especial dentro de una clase, que se llama automáticamente cada vez que se crea un objeto de esa clase.
Posee el mismo nombre de la clase a la cual pertenece y no puede devolver ningún valor (ni siquiera se puede especificar la palabra reservada
void
). Por ejemplo, si añadiéramos a la clase SSuma
un constructor, tendríamos que llamarlo también SSuma
. Cuando en una clase no se escribe propiamente un constructor, Java asume uno por defecto.Constructor por defecto[editar]
Un constructor por defecto es un constructor sin parámetros que no hace nada. Sin embargo será invocado cada vez que se construya un objeto sin especificar ningún argumento, en cuyo caso el objeto será iniciado con los valores predeterminados por el sistema (los atributos numéricos a cero, los alfanuméricos a nuloPeq, y las referencias a objetos a
null
).
Sobrecarga de métodos y de constructores
La firma de un método es la combinación del nombre y los tipos de los parámetros o argumentos.
La sobrecarga de métodos es la creación de varios métodos con el mismo nombre pero con diferente lista de tipos de parámetros. Java utiliza el número y tipo de parámetros para seleccionar cuál definición de método ejecutar.
Java diferencia los métodos sobrecargados con base en el número y tipo de parámetros o argumentos que tiene el método y no por el tipo que devuelve.
Tambien existe la sobrecarga de constructores: Cuando en una clase existen constructores múltiples, se dice que hay sobrecarga de constructores.
La firma de un método es la combinación del nombre y los tipos de los parámetros o argumentos.
La sobrecarga de métodos es la creación de varios métodos con el mismo nombre pero con diferente lista de tipos de parámetros. Java utiliza el número y tipo de parámetros para seleccionar cuál definición de método ejecutar.
Java diferencia los métodos sobrecargados con base en el número y tipo de parámetros o argumentos que tiene el método y no por el tipo que devuelve.
Tambien existe la sobrecarga de constructores: Cuando en una clase existen constructores múltiples, se dice que hay sobrecarga de constructores.
Ejemplo
/* Métodos sobrecargados */
int calculaSuma(int x, int y, int z){
...
}
int calculaSuma(double x, double y, double z){
...
}
Modificadores en Java
26 Jul, 2012 en POO etiquetado Java por Jose I Acedo
- Modificadores de acceso: PUBLIC, PRIVATE, PROTECTED, DEFAULT.
DEFAULT:
Si no elegimos ningún modificador, se usa el de por defecto, que sólo puede ser accedido por clases que están en el mismo paquete.
Si no elegimos ningún modificador, se usa el de por defecto, que sólo puede ser accedido por clases que están en el mismo paquete.
PUBLIC:
Este nivel de acceso permite a acceder al elemento desde cualquier clase, independientemente de que esta pertenezca o no al paquete en que se encuentra el elemento.
Este nivel de acceso permite a acceder al elemento desde cualquier clase, independientemente de que esta pertenezca o no al paquete en que se encuentra el elemento.
PRIVATE:
Es el modificador más restrictivo y especifica que los elementos que lo utilizan sólo pueden ser accedidos desde la misma clase en la que se encuentran. Este modificador sólo puede utilizarse sobre los miembros de una clase y sobre interfaces y clases internas, no sobre clases o interfaces de primer nivel, dado que esto no tendría sentido.
Es el modificador más restrictivo y especifica que los elementos que lo utilizan sólo pueden ser accedidos desde la misma clase en la que se encuentran. Este modificador sólo puede utilizarse sobre los miembros de una clase y sobre interfaces y clases internas, no sobre clases o interfaces de primer nivel, dado que esto no tendría sentido.
PROTECTED:
Indica que los elementos sólo pueden ser accedidos desde su mismo paquete y desde cualquier clase que extienda la clase en que se encuentra, independientemente de si esta se encuentra en el mismo paquete o no. Este modificador, como private, no tiene sentido a nivel de clases o interfaces no internas.
Indica que los elementos sólo pueden ser accedidos desde su mismo paquete y desde cualquier clase que extienda la clase en que se encuentra, independientemente de si esta se encuentra en el mismo paquete o no. Este modificador, como private, no tiene sentido a nivel de clases o interfaces no internas.
En otras palabras, si determinada clase Hijo hereda el comportamiento de una clase Padre, la clase Hijo tendrá acceso a todos aquellos campos/métodos definidos como protected en Padre, pero no aquellos declarados como private en Padre.
No hay comentarios.:
Publicar un comentario