Leyendo el tutorial CU00657B., me surgen preguntas que intento ir dilucidando retrocediendo en las lecciones y consultado la documentación del API de Java.
Cuando en el ejemplo se instancia un objeto de la siguiente manera:
Scanner entradaEscaner = new Scanner (System.in); (1)
Interpreto lo siguiente (según voy hurgando en las API de Java)
“in” es un campo de la clase System.
“in” es un objeto de la clase InputStream.
Siguiendo con la lectura de las API de Java, cuando entramos en la clase Scanner vemos que hay Constructores sobrecargados. De todas las posibilidades, vemos que la que se ajusta a nuestra instrucción (1) es:
Scanner(InputStream source)
Es decir que espera como parámetro un objeto de la clase InputStream. Por ello le enviamos como parámetro el objeto “in” (de la clase System).
Ahora bien ¿cuál es la magia que hace que “in” esté prestando atención a lo que sucede en el teclado? Lo que creo es que en este caso, más que mirar a “in” como un objeto con métodos, tenemos que pensarlo como una referencia, un “apuntar hacia”.
Cuando instanciábamos en los ejercicios anteriores un objeto al que llamábamos “taxi1” de la clase Taxi, bastaba solamente con que la referencia “taxi1” apuntara a ese espacio de memoria donde la información de taxi1 se guardaría. Y ese espacio de memoria daba igual si se reservara al comienzo de la memoria, al medio, o al final de la misma. Siempre que “taxi1” referenciara a ese lugar, cualquiera fuera él, nos bastaba.
En el caso del objeto “in”, creo que ese lugar al que referencia, ese lugar al que apunta, SI IMPORTA.
No tenemos acceso al código de la clase System, pero intuyo que si está configurada que la “entrada estándar” sea el teclado, asigna como referencia de “in” el lugar a donde llega lo que entra por teclado (por así decirlo). Si luego se cambia la entrada estándar, y la nueva entrada estándar es un archivo (supongamos), entonces “in” apuntará a ese archivo.
¿Son correctas estas ideas?.