¿Cuál es la diferencia entre public, protected, package-private y private en Java?
¡Hola a todos! Acabo de empezar a aprender Java y no puedo entender los modificadores de acceso. Parece que entiendo que controlan la visibilidad de clases, métodos y campos, pero en la práctica me confundo constantemente.
Por ejemplo, tengo este código:
public class Animal {
public String name;
protected int age;
String breed; // package-private
private String id;
public void makeSound() {
System.out.println("Some sound");
}
protected void sleep() {
System.out.println("Sleeping...");
}
void eat() {
System.out.println("Eating...");
}
private void breathe() {
System.out.println("Breathing...");
}
}
public class Dog extends Animal {
public void testAccess() {
name = "Buddy"; // accesible
age = 5; // accesible
breed = "Lab"; // accesible
// id = "123"; // NO accesible - private
makeSound(); // accesible
}
}