No sé si tienes clara cuál es la diferencia entre:
- Una clase
- Un objeto o instancia
- Object
Object es una clase. Es la clase Object. Igual que la clase String o que la clase Hashtable o la clase org.apache.struts.action.Action o la que sea. Es una clase.
Una clase es lo que usas para crear objetos. Es como una plantilla para crear objetos o instancias de un determinado tipo (o forma).
Cuando haces new String() o new Hashtable() o new org.apache.struts.action.Action() o new Object() estás usando esas clases para crear objetos o instancias de esa clase. Todos son objetos, cada uno de un tipo, y uno de esos tipos es Object.
Ahora, los arrays, como hemos dicho son objetos, pero no son objetos de ninguna clase. Son objetos internos de la JVM. Es decir, no hay una clase Array (******). Lo que hay es un mecanismo por el que cuando tú declaras String[] palabras = new String[5] se crea un objeto en la memoria que se encarga de guardar las referencias a 5 objetos dde tipo String. Ese objeto
no es de la clase Object. Es un objeto que, digámoslo así, no tiene clase. Tampoco vamos a entrar aquí a ver cómo funciona internamente la VM proque no viene a cuento. Pero lo que importa es que no tiene nada que ver con la clase Object.
Por otro lado está el tema del s.o.print y el parámetro que recibe. espero que eso haya quedado claro. El asunto clave ahí, es que si le pasas un array a s.o.print nunca vas a sacar nada interesante para ti porque nunca le vas a poder poner al objeto de memoria de la VM que representa el array un método toString(). (******)
(******) Ojo, para confundir más aún, en realidad que existe una clase que se llama Arrays pero no tiene nada que ver con esta discusión. La clase Arrays no se usa para crear arrays.
(******) En realidad con esa clase Arrays podrías hacer
algo bastante parecido, que sería esto:
pero no es lo mismo porque ahí eres tú mismo el que primero está convirtiendo ek array en una cadena para después llamar a s.o.println