Avatar ·

Diferencia entre public, protected, package-private (default) y private en Java

¡Hola a todos! Acabo de empezar a estudiar Java y no logro entender los modificadores de acceso. Aunque leí la teoría, en la práctica me confundo constantemente sobre cuándo usar `public` y cuándo `private`.\n\nPor ejemplo, tengo este código:\n\n```java\npublic class Animal {\n public String name = "Unknown";\n protected int age = 5;\n String breed = "Mixed"; // package-private\n private String id = "A123";\n \n public void showInfo() {\n System.out.println("Name: " + name);\n System.out.println("Age: " + age);\n System.out.println("Breed: " + breed);\n System.out.println("ID: " + id);\n }\n}\n```\n\nEn otra clase dentro del mismo paquete puedo acceder a `name`, `age` y `breed`, pero no a `id`. Y si creo una subclase en otro paquete, puedo usar