+0

¿Qué son los modificadores de acceso en Java?

Duration: 3m 30s



Vamos a ver los modificadores de acceso de Java. Hay diferentes modificadores: private, sin modificador, protected, public, y por último uno diferente a todos estos, static.

Son palabras clave que se utilizan para controlar qué partes del código pueden acceder a los miembros de una clase (fields, métodos, constructores).

private

El miembro solo es accesible dentro de la clase en la que se define. De ninguna manera se puede acceder desde fuera.

En nuestro ejemplo de Vehicle, podríamos poner como privados nuestros fields.

package me.polvallverdu.course.vehicles;  
  
public class Vehicle {  
  
    private boolean powered;  
    private final int maxFuel;  
    private int fuel;  
  
    // ...
  
}

Sin modificador

El miembro es accesible dentro de la misma clase, y en otras clases dentro del mismo package.

En el ejemplo de Vehicle, este era nuestro error. Al no poner modificador, no podíamos acceder desde Main porque no estaban en el mismo package.

protected

El miembro es accesible dentro de la misma clase, en otras clases dentro del mismo package, y en clases que hereden de esta.

Ahora no nos será útil, porque no hemos hablado de herencia de clase, así que más adelante lo veremos.

public

El miembro es accesible desde cualquier parte del código.

Para poder instanciar nuestra clase Vehicle, y acceder a sus métodos, los haremos públicos:

package me.polvallverdu.course.vehicles;  
  
public class Vehicle {  
 
    // ...
    
    public Vehicle(int maxFuel) {  
        this.powered = false;  
        this.maxFuel = maxFuel;  
        this.fuel = maxFuel;  
    }  
  
    public void on() {  
        this.fuel -= 5;  
        this.powered = true;  
    }  
  
    public void off() {  
        this.powered = false;  
    }  
  
    public void fillUp() {  
        this.fuel = this.maxFuel;  
    }  
  
}

static

El modificador static tiene una funcionalidad totalmente diferente. Un miembro static pertenece a la clase en sí, no a un objeto individual. Esto significa que no hace falta instanciar la clase para acceder a ese miembro.

El método main en Main es estático, con lo cual no hace falta instanciar Main para llamar al método main.

package me.polvallverdu.course;  
  
public class Main {  
  
    public static void main(String[] args) {
        // No hace falta instanciar para correr el código aquí dentro.  
    }
    
}