Primero tienes que entender bien la POO para poder aplicarla. Te explicaré un poco.
Ésta línea:
Propietario AuxProp= new Propietario(null, null);
Lo que hace es crear una
instancia de la clase Propiertario. A partir de ahora, AuxProp es un
objeto que guarda una referencia. Hay dos estados en la creación de objetos:
- Declaración
- Instanciación
PARTE 1: DECLARACIÓN
Propietario auxProp;
.
Éste objeto le indica al compilador que es un objeto tipo Propietario pero que aún no es instanciado. Es como si Lamborgini creara un plano de un nuevo automóvil, el plano indica que dicho plano es de tipo X Modelo, pero aún no ha sido creado, por lo que ese plano no tiene utilidad hasta que se construya.
Volviendo a tu código,
auxProp aún no ha sido construido, está en "espera". En éste punto, el objeto
auxProp tiene una referencia que la VM le asigna por defecto a los objetos sin instanciar, que es NULL. Un valor NULL significa que no hace referencia a absolutamente nada.
PARTE 2: INSTANCIACIÓN
En ésta parte se
construye el objeto tipo Propietario con la palabra reservada
new. Pon especial atención en ésta palabra. En Java y en todos los lenguajes de alto nivel, la palabra
new hace que se construya una representación de una clase y dicha representación tendrá los atributos y métodos/funciones de dicha clase. Ésto es ahora una instancia, un objeto funcional.
Al instanciar un objeto con
new, la VM le asigna una
dirección en memoria y dicho objeto siempre hará referencia a esa dirección en memoria. Cuando tu uses
auxProp en realidad estás llamando al objeto que tienes almacenado en algún espacio de memoria. Entender ésto es muy importante.
Como ya has creado e instanciado tu objeto tipo Propietario, se le ha asignado una dirección en memoria. Ahora, cuando tu haces:
AuxProp.setNombreCompleto(Capturar);
Las veces que hagas eso, le estarás cambiando el nombre al mismo objeto. Si ese mismo objeto Propietario lo guardas en 5 objetos Immueble,
los cinco objetos Propietario en los 5 objetos Immueble serán el mismo. Por ésta razón, cuando le cambias en nombre al objeto 1, 2, 3, 4 o 5, al imprimir los objetos Propietario te mostrará la misma información, por la razón
que es el mismo objeto en memoria.
Lo que tienes que hacer es simplemente eliminar la declaración del objeto
auxProp del main y colocarlo dentro del case 1 del switch. De ésta manera:
System.
out.
println("Ingrese el Estado del Inmueble (Libre - Ocupado)"); String estado
= lector.
readLine();
System.
out.
println("Ingrese el Nombre del Propietario"); Propietario propietario = new Propietario();
propietario.setNombreCompleto(lector.readLine());
System.
out.
println("Ingrese el numero de telefono del propietario"); propietario.setTelContac(lector.readLine());
if(Cont<5){
ArregloI[Cont].Llenar(Estado, AuxProp);
Cont+=1;
}
else
System.
out.
println("Ha llegado al límite máximo de Inmuebles"); break;
Así estamos declarando un objeto Propietario cada vez que se elige la opción uno. Por lo que, cada vez que elijas la opción 1, se creará un
nuevo objeto Propietario y por lo tanto serán objetos diferentes.
Como recomendación:
- Las variables deben empezar por minúscula. Si hay una segunda palabra, ésta debe empezar con mayúscula.
- Analizar si una variable u objeto va a ser utilizada solo en un pequeño ámbito o si será compartida entre varios procesos. Ésto para evitar crear variables en contextos donde no se van a utilizar y gastar memoria.
- Empieza a utilizar POO.
- Leer buenas prácticas en Java
- Leer Patrones de diseño en Java