Programming
T05-001-05 Modificadores.
Enunciado
Modificadores de acceso.
Los modificadores de acceso controlan las clases y objetos que tienen acceso a las clases, propiedades y métodos en las que se incluyen.
Modificadores de acceso en la declaración de las clases:
public: La clase, así como los objetos instanciados de dicha clase, son accesibles por cualquier otra clase.- default: La clase, así como los objetos instanciados de dicha clase, solo son accesibles por clases que estén declaradas en el mismo paquete.
Modificadores de acceso para propiedades y métodos:
public: La propiedad o método es accesible desde cualquier otra clase.private: La propiedad o método solo es accesible desde la clase en la que está declarada.- default: La propiedad o método solo son accesibles por clases que estén declaradas en el mismo paquete.
protected: La propiedad o el método es accesible desde las clases del paquete y desde las subclases.En todos los ejercicios que estamos desarrollando, estamos utilizando los dos modificadores de acceso para las clases (
publicy default), ya que dijimos que en un mismo fichero se podían incluir varias clases, pero solo una de ellas podía estar declarada comopublic.Nos centraremos, de momento. en diferenciar los atributos
publicyprivatecon un ejemplo.Ejemplo:
public class OOP_ejemplos {
public static void main(String[] args) {
SubClase miObj1 = new SubClase(8);
miObj1.y = 7; //miObj1.x = 7 devolvería error de compilación
System.out.println(miObj1.suma()); // suma(9, 7) devolvería error de compilación
}
}
class SubClase {
private int x;
public int y;
public SubClase(int _x) {
x = _x;
}
public SubClase(int _x, int _y) {
x = _x;
y = _y;
}
public int suma() {
return x + y;
}
private int suma(int _x, int _y) {
return _x + _y;
}
}En el código anterior, podemos observar que:
- Si queremos asignar un valor a
x, necesitamos hacerlo desde el constructor, ya que posteriormente no podríamos modificar su valor, al estar declarada como privada.- La propiedad
ysí puede ser accedida y modificada desde cualquier otra clase, sin necesidad de ser inicializada en el constructor.- El método
suma(int _x, int _y)no puede ser utilizado desde el exterior de la clase, por lo que hay que utilizar el métodosuma()habiendo inicializado previamente las propiedades a través del constructor con parámetros.Ejercicio:
Partiendo del código del ejemplo, haz que el valor de las dos propiedades se lean desde el teclado en el método main(). Haz también que en el cálculo de la suma de las dos propiedades intervenga el método
private int suma(int _x, int _y), teniendo en cuenta que este método solo puede ser utilizado desde la propia clase.Nota: Elimina también los comentarios del código.
Solución
package oop_ejemplos;
import java.util.Scanner;
public class OOP_ejemplos {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
SubClase miObj1 = new SubClase(sc.nextInt());
miObj1.y = sc.nextInt();
System.out.println(miObj1.suma());
}
}
class SubClase {
private int x;
public int y;
public SubClase(int _x) {
x = _x;
}
public SubClase(int _x, int _y) {
x = _x;
y = _y;
}
public int suma() {
return suma(x, y);
}
private int suma(int _x, int _y) {
return _x + _y;
}
}
Input
8 5
9 7
Output
13
16

