Qual é a diferença entre public, protected, package-private e private em Java?
Olá a todos! Acabei de começar a estudar Java e não consigo entender os modificadores de acesso. Acho que entendo que eles controlam a visibilidade de classes, métodos e campos, mas na prática fico sempre confuso.
Por exemplo, tenho 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"; // acessível
age = 5; // acessível
breed = "Lab"; // acessível
// id = "123"; // NÃO acessível - private
makeSound(); // acessível
}
}