Acceso privado, palabra clave “private”
Al definir un atributo, método o clase como privado, se le está dando acceso solo desde la clase donde fue definido. Por ejemplo, en el caso de velocidad de un Auto:
public class Auto {
private int velocidad;
public void acelerar () {
this.velocidad += 10;
}
}
Al definir un atributo, método o clase como privado, se le está dando acceso solo desde la clase donde fue definido. Por ejemplo, en el caso de velocidad de un Auto:
public class Auto {
private int velocidad;
public void acelerar () {
this.velocidad += 10;
}
}
Por lo tanto el único modo de acceder a modificar la velocidad es a través del método acelerar. Esta propiedad no está accesible desde ningún otro alcance sino el de la clase.
Para poder acceder al atributo velocidad, solo podrán hacerlo los métodos de la misma clase.
Acceso por defecto, “default” o “package”
En el caso del acceso por defecto, que es el acceso cuadno no se declara la accesibilidad a un atributo, método o clase, el acceso es dentro del mismo paquete o directorio. Por ejemplo si tengo dos clases Auto y Camion, y auto tiene un conductor sin definir su accesibilidad, es decir:
package vehículos;
public class Auto extends Vehiculo{
Conductor getConductor(){
//Acá se retorna el conductor
}
}
Luego en la clase Camion que está en el mismo package:
package vehículos;
public class Camion extends Vehiculo{
public void comunicar(Vehiculo v){
v.getConductor().conversar(); //Se tiene acceso a getConductor por estar ambas clases en el mismo package.
}
}
Para poder acceder al método getConductor() podrán hacerlo únicamente las clases ubicadas en el mismo package o directorio.
Acceso protegido, palabra clave “protected”
Al definir un atributo o método como protegido estamos dejándolo disponible para las clases que heredan de esta clase, ejemplo:
public class Vehiculo{
protected int cantidadDeRuedas = 4;
}
Luego en la clase Auto, tendremos acceso a cantidadDeRuedas:
public class Auto extends Vehiculo{
public int getCantidadDeRuedas(){
return this.cantidadDeRuedas;
}
}
Para poder acceder al atributo cantidadDeRuedas, solo podrán hacerlo las clases que heredan de Vehiculo, es decir la familia de clases.
Acceso público, palabra clave public
Definiendo un atributo o método o clase como
público permite que se tenga acceso a estos desde cualquier alcance, desde
todos lados.
Acceder a los atributos públicos, todos podrán
hacerlo.
Resumen de accesibilidad
Resumen de accesibilidad
Accesibilidad
|
Acceso en
la misma clase
|
Acceso en
el mismo package
|
Acceso en
el árbol de herencia
|
Acceso
desde todas las clases
|
private
|
Si
|
No
|
No
|
No
|
default o
package
|
Si
|
Si
|
No
|
No
|
protected
|
Si
|
Si
|
Si
|
No
|
public
|
Si
|
Si
|
Si
|
Si
|
Los
tipos de datos en java
ModifVisibilidad
indica desde que parte del código se puede acceder al atributo:
public: indica que es un atributo accesible a
través de una instancia del objeto.
private: indica que a través de una instancia
no es accesible el atributo. Al heredar el atributo se convierte en
inaccesible.
protected: indica que a través de una instancia
no es accesible el atributo. Al heredar si se puede usar desde la clase
derivada.
Sin
especificar: indica visibilidad de paquete, se puede acceder a través de una
instancia, pero sólo desde clases que se encuentren en el mismo paquete.
Métodos
de una clase
Una vez hemos creado una instancia de la clase
Persona, ¿Cómo podemos recuperar a partir de ella su nombre?, ¿Cómo podemos
recuperar el nombre que almacenamos en un contacto de nuestra agenda? Una
posibilidad es simplemente leer el valor del atributo, el acceso directo a los
atributos de una clase esta desaconsejado. La respuesta es: a través de una
llamada a un método que devuelva el nombre del contacto. En el caso de la recuperación
del nombre, el tipo de dato de retorno es una cadena class String. Un método
que cumple este objetivo es el siguiente:
1 String getPersona(){
2 return nombre;
3 }
Sintaxis
La
sintaxis de declaración de un método es:
(modificadores)
tipoRetorno nombre(tipo argumento1, tipo argumento 2,…)
{Bloqueo de definición del
método;
}
En
estas pocas líneas de código hay varias novedades, veámoslas:
1.
Un método tiene un nombre que lo identifica, en este caso getNombre.
2.
Delante del nombre del método escribimos el tipo del valor de retorno, en
nuestro caso, como lo que el método devuelve es el nombre cuyo tipo es un
String, este ser al tipo del valor retorno.
3. Detrás del nombre del método aparecen unos
paréntesis sin nada en su interior. Dentro de los paréntesis se define la lista
de argumentos del método. Si estas familiarizado con las matemáticas, los
argumentos de los métodos tienen el mismo significado que los argumentos de las
funciones matemáticas, por ejemplo seno (45º) significa que queremos utilizar
el cálculo del seno sobre el argumento 45 grados. En nuestro caso la lista está
vacía, lo que indica que no necesito especificar ningún argumento para poder
hacer uso del método.
Comprensión del ciclo de vida de las
variables
El tiempo durante el que una variable conserva su valor se denomina duración. El valor de una variable puede cambiar durante su duración, pero conservará algún valor. Cuando una variable pierde ámbito, ya no tiene un valor.
El tiempo durante el que una variable conserva su valor se denomina duración. El valor de una variable puede cambiar durante su duración, pero conservará algún valor. Cuando una variable pierde ámbito, ya no tiene un valor.
Cuando
un procedimiento comienza a ejecutarse, se inicializan todas las
variables. Una variable numérica se inicializa en cero, una cadena de longitud
variable se inicializa en una cadena de longitud cero ("") y una
cadena de longitud fija se completa con el carácter representado por el código
de carácter ASCII 0 Car (0). Las variables se inicializan
en Empty. Cada elemento de una variable de tipo definido por el
usuario se inicializa como si fuese una variable independiente.
Cuando
declara una variable de objeto, se reserva espacio en la memoria, pero el
valor se establece en Nothing hasta que asigne una referencia de
objeto a ella con la instrucción Set.
Si
el valor de una variable no ha cambiado durante la ejecución del código,
conserva el valor inicializado hasta que pierde ámbito.
Una
variable de nivel de procedimiento declarada con la
instrucción Dim conserva un valor hasta que el procedimiento termina
de ejecutarse. Si el procedimiento llama a otros procedimientos, la variable
conserva su valor mientras esos procedimientos se estén ejecutando.
Si
se declara una variable de nivel de procedimiento con la palabra
clave Static, la variable conserva su valor siempre que el código se esté
ejecutando en cualquier módulo. Cuando todo el código ha terminado de
ejecutarse, la variable pierde su ámbito y su valor. Su duración es la misma
que la de la variable de nivel de módulo.
Las
variables de nivel de módulo y las variables estáticas son diferentes. En
un módulo estándar o en un módulo de clase, conserva su valor
hasta que detenga la ejecución del código. En un módulo de clase, conserva su
valor siempre que exista una instancia de la clase. Las variables de nivel de
módulo consumen recursos de memoria hasta que restablezca los valores, así que
úselas solo cuando sea necesario.
Si
incluye la palabra clave Static antes de una
instrucción Sub o Function, se conservarán los valores de todas
las variables de nivel de procedimiento del procedimiento entre llamadas.