Java - :( Confusion .....

 
Vista:
Imágen de perfil de James Ferney
Val: 9
Ha aumentado su posición en 5 puestos en Java (en relación al último mes)
Gráfica de Java

:( Confusion .....

Publicado por James Ferney (1 intervención) el 13/08/2020 12:56:33
Hola a todos. Quisiera saber si en JAVA un los objetos almacenados en un vector puede utilizar los metodos de diferentes clase. Me explico:

Creé una clase padre o super clase llamada Persona. Tambien creé dos subclases llamadas Estudiante y Profesor cada una de ellas con sus métodos propios, estas dos subclases heredan de la clase Persona.
He declarado un vector de tipo Persona con 3 elementos así:

Persona per[ ] = new Persona[2];

los objetos los creé asi:

per[0] = new Persona (0);

per[1] = new Estudiante(1);

Sin embargo, cuando en el main realizo la llamada de un método de estudiante para el objeto per [1], este no me aparece, solo me paparecen los método de persona.

No sé que estoy haciedo mal, soy nuevo en este maravillosos mundo.
Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

:( Confusion .....

Publicado por Rodrigo (623 intervenciones) el 13/08/2020 17:15:01
La clase base tiene un efecto de filtro para el caso que mencionas.
Aunque el objeto sea de tipo estudiante (y no ha dejado de serlo), al mirarlo como Persona, solo ves los miembros que Persona ha dicho que las Personas tienen.

Tienes 2 posibles soluciones:

Hacer que el metodo exista en la clase Persona y sea redefinido por las clases que derivan, o bien hacer un cast preguntando antes si el objeto es de tipo Estudiante.

Que metodo existe solo en el Estudiante, pero no en la Persona? y por que quieres llamar el metodo especifico desde un arreglo de Personas?

Parece mejor que si todas las personas son Estudiantes, definir el arreglo como arreglo de Estudiantes.

Podrias explicar mas respecto a que metodo estas intentando usar desde Estudiante?

Por ultimo, Persona parece ser una clase abstracta, no tiene mucho sentido crear Personas directamente como lo enuncias en tu pregunta, parece mas razonable crear Estudiantes o Profesores.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jas
Val: 9
Ha aumentado su posición en 5 puestos en Java (en relación al último mes)
Gráfica de Java

:( Confusion .....

Publicado por Jas (2 intervenciones) el 13/08/2020 20:35:43
Hola Rodrígo. Gracias por tu respuesta.

Yo deseo desde el main, llenar un vector a traves de un ciclo for, es por eso que declaro un vector tipo Persona, para ingresar en él tanto estudiantes como profesores.

El programa debe indicarme en que nivel de escolaridad se encuentra cada estudiante (basico, secuandario o universitario), para ello declare un método que llame Nivel. Y para Profesor debo indicar el tipo de contrato entre Ocasional o Permanente.

Aqui los códigos (lo que llevo hasta ahora), el problema surge cuando llamo en el main al método setNivel de la clase Estudiante.

Nuevamente te agradezco la ayuda.

CLASE PERSONA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package colegio;
 
import java.util.Scanner;
 
public class Persona {
 
	private String id, nombre, dir, ocupacion;
	private int cantidad;
 
	public Persona (int i){
		System.out.println ("Ingresa la identificacion de la persona "+(i+1));
		Scanner id = new Scanner (System.in);
		this.id=id.nextLine();
		System.out.println ("Ingresa el nombre de la persona "+(i+1));
		Scanner nombre = new Scanner (System.in);
		this.nombre = nombre.nextLine();
		System.out.println ("Ingresa la dirección de la persona "+(i+1));
		Scanner dir = new Scanner (System.in);
		this.dir = dir.nextLine();
	}
 
	public String getId() {
		return id;
	}
 
	public void setId(String id) {
		this.id = id;
	}
 
	public String getNombre() {
		return nombre;
	}
 
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
 
	public String getDir() {
		return dir;
	}
 
	public void setDir(String dir) {
		this.dir = dir;
	}
 
	public static int mensaje () {
		int n;
		System.out.println ("----  BIENVENIDO AL PROGRAMA DE LA ACTIVIDAD 3  ----");
		System.out.println ("");
		System.out.println ("Este programa permite recolectar datos de Estudiantes y profesores de un colegio");
		System.out.println ("Cuantas personas va a registrar?");
		Scanner a = new Scanner (System.in);
		n= a.nextInt();
		return n;
	}
 
	public static String dimeOcupac (int i) {
		String ocupacion;
		System.out.print("Indique la ocupacion de la persona "+(i+1)+":");
		Scanner a = new Scanner (System.in);
		ocupacion = a.nextLine();
		return ocupacion;
	}
}


CLASE ESTUDIANTE

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package colegio;
 
public class Estudiante extends Persona{
 
	private String nivel, grado, seccion;
 
	public Estudiante (int i){
		super(i);
	}
 
	public String getNivel() {
		return nivel;
	}
 
	public void setNivel(String nivel) {
		this.nivel = nivel;
	}
 
	public String getGrado() {
		return grado;
	}
 
	public void setGrado(String grado) {
		this.grado = grado;
	}
 
	public String getSeccion() {
		return seccion;
	}
 
	public void setSeccion(String seccion) {
		this.seccion = seccion;
	}
}


CLASE PROFESOR
1
2
3
4
5
6
7
8
9
10
11
package colegio;
 
public class Profesor extends Persona{
 
	private String modalidad, materia;
	private int num_materia, numCursos;
 
	public Profesor (int i) {
		super(i);
	}
}


CLASE MAIN
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package colegio;
 
import java.util.Scanner;
 
public class Main {
 
	public static void main(String[] args) {
		int n;
		String ocupa, nivel;
		n=Persona.mensaje();
		Persona per[] = new Persona[n];
		for (int i=0; i<n; i++) {
			ocupa = Persona.dimeOcupac(i);//llama funcion estatica para asignar la ocupacion de la persona i
			if (ocupa.equals("Profesor")) {
				per[i] = new Persona (i);
 
				System.out.print("soy profesor");
 
			}
			else {
				per[i] = new Estudiante(i);
 
				System.out.print ("La persona "+(i+1)+" es un Estudiante. Indique el nivel de escolaridad: ");
				Scanner niv = new Scanner (System.in);
				nivel = niv.nextLine();
				per[i].setNivel(nivel);
			}
		}
	}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

:( Confusion .....

Publicado por Rodrigo (623 intervenciones) el 13/08/2020 23:37:59
Crealo como estudiate:

1
Estudiante estudiante = new Estudiante(...);

llama al metodo que quieras,

1
estudiante.serNivel( ... )

y despues lo asignas al vector

1
p[i] = estudiante;

(Cuando publiques codigo, usa el boton </> que aparece en la parte superior, para que el codigo tenga lineas, este indentado, etc. De esta manera es facil indicar algo indicando la linea, y el codigo queda bien indentado y mas facil de leer)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jas
Val: 9
Ha aumentado su posición en 5 puestos en Java (en relación al último mes)
Gráfica de Java

:( Confusion .....

Publicado por Jas (2 intervenciones) el 14/08/2020 02:17:38
Excelente, no se me paso por la cabeza hacerlo de esa manera.
Muchas gracias por tu gran ayuda Rodrígo. Gracias Totales :) ..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar