Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
3
respuestas

Duda referencias

Hola, disculpen pueden explicarme esta referencia? La hicieron diferente a como esta en la clase, no entendi mucho gracias.

Cliente clienteNormal = new Cliente();
clienteNormal.setNombre("Flavio");

Cliente clienteVip = new Cliente();
clienteVip.setNombre("Romulo");

Object[] refs = new Object[5];
refs[0]  = clienteNormal;
refs[1]  = clienteVip;

System.out.println(refs[1].getNombre());COPIA EL CÓDIGO
Suponiendo que el código está dentro de una clase con el método main, ¿se compila el código? Y si compila, ¿cuál es el resultado?

No compile, debido a la línea:

System.out.println(refs[1].getNombre());

Correcto. Observe que nuestro array almacena referencias de tipo Object. Al acceder a alguna posición en el array, recibimos una referencia de tipo Object:

Object ref = refs[1];COPIA EL CÓDIGO Con esta referencia en la mano, no podemos llamar al método getNombre(). Para que esto funcione, primero debemos hacer un type cast antes.

3 respuestas

Hola Edgar, espero que estés bien.

El error se debe a que el array refs está declarado como un array de Object, por lo que cuando intentas acceder a refs[1].getNombre(), el compilador no reconoce el método getNombre() porque el tipo estático es Object, que no tiene ese método.

Aunque los elementos reales que se almacenan en el array son objetos de la clase Cliente, el compilador solo considera el tipo declarado para el array, que es Object.

Puedes, por ejemplo, realizar un type cast o una conversión de tipo explícita para que el compilador pueda entender que los elementos en el array son de tipo Cliente.

System.out.println(((Cliente) refs[1]).getNombre());

Al hacer ((Cliente) refs[1]), estás convirtiendo la referencia refs[1] de tipo Object a tipo Cliente, lo que permite llamar al método getNombre().

Además, también sería recomendable realizar una verificación para asegurarse de que el tipo sea realmente Cliente antes de realizar la conversión para evitar errores en tiempo de ejecución.

if (refs[1] instanceof Cliente) {
    System.out.println(((Cliente) refs[1]).getNombre());
} else {
    System.out.println("El elemento en la posición 1 no es un Cliente.");
}

Y con esta verificación, si el elemento en la posición 1 no es de tipo Cliente, evitarás un ClassCastException y manejarás adecuadamente la situación.

Recuerda que si tienes alguna duda sobre el contenido, estaremos aquí para ayudarte.

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios

Ok ya quedó mas claro Adriana gracias.

Te puedo preguntar otra duda de la clase Cuenta?

No entendí esta parte:

private Cliente titular = new Cliente();

Aquí nos dicen que cada vez que se crea una nueva cuenta, se genera un new Cliente. Y no entendí porque private titular lo cambiaron aprivate Cliente titular, muchas gracias.

Hola Edgar, espero que estés bien.

Sí, al crear una nueva instancia de la clase Cuenta se creará automáticamente una nueva instancia de la clase Cliente y se asignará a la variable titular. Porque cada cuenta bancaria (representada por la clase) está asociada a un titular (representado por la clase Cliente) y entonces al inicializar la variable titular con un nuevo objeto Cliente, se asegura que cada cuenta tenga un titular asignado desde el principio.

Esta relación entre clases es importante para mantener los principios de integridad y seguridad, por ejemplo.¿Qué te parece?

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios