Vamos a ver los diferentes modificadores de acceso.
Para explicar los modificadores de acceso vamos a
crearnos un paquete en Eclipse al que vamos a llamar paquetePruebas.
Vamos a crearnos tres clases Clase1 en el paquete poo
y sin el método main, una Clase2 en el paquete poo con el método main y una
tercera clase Clase3 sin el método main y en el paquete paquetePruebas.
En la Clase1 vamos a declarar dos variables y un
método:
package poo;
public class Clase1 {
int mivar=5;
int mivar2=7;
String miMetodo() {
return "El valor
de mivar2 es: "+mivar2;
}
}
Si nos fijamos no hemos puesto ningún modificador de
acceso delante de las variables ni del método. Esto significa que tienen el
método por defecto.
En la Clase2 vamos a crear una instancia de la Clase1:
package poo;
public class Clase2 {
public static void main(String[] args) {
Clase1 myobj=new Clase1();
}
}
Si ahora llamamos a las variables y método de la
Clase1 lo podemos hacer porque el modificador por defecto sí que permite el
acceso desde la propia clase y desde el propio paquete:
Si ahora en la Clase1 declaramos la variable mivar
como private ya no tendremos acceso desde la Clase2.
Ahora en la Clase3 vamos a hacer que herede de la
Clase1 pero también al estar en diferentes paquetes tendremos que importar
también el paquete.
package paquetePruebas;
import poo.Clase1;
public class Clase3 extends Clase1{
}
Volvemos a la Clase2 y creamos una instancia de la
Clase3:
package poo;
public class Clase2 {
public static void main(String[] args) {
Clase1 myobj=new Clase1();
Clase3 myobj2=new Clase3();
}
}
Nos da un error al crear la instancia de la Clase3 porque pertenece a un paquete diferente para ello hay que importar el paquete paquetePruebas:
import paquetePruebas.Clase3;
Si ahora llamamos a las variables y métodos desde la
Clase3 no nos aparece las variables ni el método de la Clase1:
Esto es porque en la Clase1 se está utilizando el
método por defecto y no es accesible desde otra subclase. Si declaramos la
variable mivar como protected:
protected int mivar=5;
Ahora sí que nos aparece esta variable:
El modificador protected sí que es
accesible desde otra subclase.
No hay comentarios:
Publicar un comentario