Acceso en Java
Escribe una clase Gate en Gate.java con un campo private int llamado code, un constructor Gate(int n) que pone code = n;, y un método void show() que imprime code. En Pier.java, construye una puerta con Gate g = new Gate(9);, luego llama g.show();. Compila ambos archivos y ejecuta java Pier. La pantalla debe mostrar una línea: 9. El campo está oculto para Pier. El método en Gate aún puede leerlo. Poner private en el campo es lo que enseña esta página.
Un campo que Pier no debe nombrar directamente
Hasta ahora otras clases en la misma carpeta a menudo podían alcanzar campos como j.fill o t.size cuando esos campos no tenían palabra de acceso. La palabra private cambia eso. Un campo private pertenece a la clase que lo declara. Los métodos dentro de esa misma clase pueden usar el campo. Una clase distinta — aquí Pier — no debe escribir g.code.
Crea primero Gate.java. La línea public class es public class Gate. No dejes un nombre de clase antiguo Tag o Jar aquí. Dentro de las llaves declara private int code;. Escribe el constructor Gate(int n) { code = n; } con nombres distintos para que esta página no necesite this. Luego escribe:
void show() { System.out.println(code); }
En Gate.java no hay main. Guarda antes de compilar. El método show se sienta en la misma clase que code, así que puede leer el campo private. Ese es el camino permitido en esta página.
public class Gate {
private int code;
Gate(int n) {
code = n;
}
void show() {
System.out.println(code);
}
}
Pier llama show, no g.code
Crea Pier.java en la misma carpeta. Su línea public class es public class Pier. Dentro de main, escribe Gate g = new Gate(9); luego g.show();. No escribas System.out.println(g.code); en esta página. Si intentas g.code desde Pier mientras code es private, javac lo rechaza.
Mantén Pier como la clase que guarda main. No pongas main dentro de Gate en esta lección. Si aún queda un archivo Yard de la página static en la carpeta, no ejecutes java Yard en esta lección — ejecuta java Pier después de compilar Gate.java y Pier.java.
public class Pier {
public static void main(String[] args) {
Gate g = new Gate(9);
g.show();
}
}
Desde la carpeta que guarda ambos archivos, ejecuta javac Gate.java Pier.java. Puedes compilar primero Gate.java y luego Pier.java cuando ambos estén completos. Cuando paréntesis, llaves y puntos y coma coinciden, javac no escribe una línea propia. Luego ejecuta java Pier — no java Pier.java ni java Gate. Quita el final .java del comando de ejecución. Arranca la clase que guarda main. Los mismos comandos funcionan en Windows y en macOS.
El programa debe imprimir una línea y parar: 9. No debe pedirte que escribas. Si la terminal espera teclado, aún queda una llamada nextLine de un ejercicio antiguo en un archivo. Bórrala y mantén new Gate(9) más g.show(); en Pier, con private int code en Gate.
Recorre la ejecución una vez. Java empieza en Pier.main. La expresión new Gate(9) construye una puerta y guarda 9 en code dentro del constructor. La llamada g.show() entra en show sobre ese mismo objeto. Dentro de Gate, show puede leer code e imprime 9. Pier nunca nombró el campo. La pantalla muestra 9.
Si escribes System.out.println(g.code); en Pier en lugar de g.show();, javac se detiene con un error de acceso mientras code es private. Ese rechazo es el punto de esta página. Vuelve a poner g.show();.
Comparado con static y con campos abiertos
En la página static llamaste Tag.ping(); sin un campo de objeto que ocultar. Eso sigue funcionando. Esta página oculta un campo y abre un método. Una demo sobrante Tag.ping(); es otra lección. Para esta página mantén Gate y Pier y g.show();.
Las páginas anteriores a menudo dejaban campos sin private, así que j.fill desde otra clase compilaba. Esa forma más suelta aún aparece en demos pequeñas. Esta lección elige private a propósito para que veas el límite. Imprimir g solo con System.out.println(g); no muestra un 9 limpio. Llama g.show(); o imprime a través de un método que la clase permita.
Dos puertas, dos códigos
Cada new Gate(...) guarda su propio code private. Puedes escribir Gate a = new Gate(2); y Gate b = new Gate(8);, luego llamar a.show(); y b.show();.
public class Pier {
public static void main(String[] args) {
Gate a = new Gate(2);
Gate b = new Gate(8);
a.show();
b.show();
}
}
Compila y ejecuta otra vez: javac Gate.java Pier.java, luego java Pier. La pantalla debe mostrar 2 en una línea y 8 en la siguiente. Cada llamada show corrió en su propio objeto y leyó el campo private de ese objeto. Escribir Gate b = a; no construye un segundo objeto — usa dos llamadas new Gate(...) cuando quieras dos códigos.
Si ambas líneas muestran el mismo número, comprueba que cada new pasa un argumento distinto. Si javac se queja de code en Pier, aún tienes una línea directa g.code — quítala y mantén show.
Lo que queda para packages
Esta página mantiene ambos archivos en la misma carpeta con el diseño de paquete por defecto. Una página posterior — packages — pone clases en carpetas con nombre con líneas package. Quédate aquí con private y show. No inventes una tabla completa public/protected en esta página; el objetivo de la lección es un campo private y un método que aún puede leerlo.
Si javac no encuentra Gate al compilar Pier.java, comprueba que Gate.java está en la misma carpeta y que la línea de clase es public class Gate. Cuando la carpeta aún guarda Tag.java o Yard.java, déjalos o bórralos solo si confunden el comando de compilación. Ejecuta java Pier después de compilar el par Gate y Pier de esta lección.
Antes de packages
Puedes declarar private int code;, escribir Gate(int n) { code = n; } y void show() { System.out.println(code); }, y desde Pier ejecutar Gate g = new Gate(9); luego g.show();. Compila ambos archivos y ejecuta java Pier. La pantalla muestra 9. El campo private se quedó dentro de Gate. El método de la misma clase lo imprimió. La página siguiente es packages, donde colocas clases en carpetas de paquete con nombre.
Mantén private en el campo. Mantén la impresión dentro de show, no como g.code desde Pier. Mantén main en Pier. Esos tres hábitos son el punto de control de esta página antes de seguir. Cuando la pantalla muestra 9 a través de show, has cruzado el límite de acceso como pretende esta lección.
🧠 Pon a Prueba tu Conocimiento
Pon a Prueba tu Conocimiento
Ponte a prueba con este cuestionario interactivo y descubre qué tan bien entiendes el tema
📝 Instrucciones
- Lee cada pregunta cuidadosamente
- Selecciona la mejor respuesta para cada pregunta
- Puedes repetir el quiz tantas veces como quieras
- Tu progreso se mostrará en la parte superior