Autor Tema: tiempo de ejecución máquina virtual java chequea los tipos dinámicos CU00690B  (Leído 2424 veces)

camoay

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 44
    • Ver Perfil
Hola a todos, aquí les dejo las respuestas y el código de mi ejercicio:

Enunciado y Respuestas:
Código: [Seleccionar]
Responde a las siguientes preguntas:

Supongamos la superclase Vehiculo que representa a cualquier tipo de vehículo y la subclase Taxi que representa a un tipo de vehículo concreto.

a) ¿Un objeto de tipo estático declarado Taxi puede contener a un objeto Vehiculo en tiempo de ejecución?

    No, daría error.

b) ¿Un objeto de tipo estático declarado Vehiculo puede contener a un objeto Taxi en tiempo de ejecución?

    Si y es un reflejo del polimorfismo de las variables en Java.
   
c) Escribe el código de una clase Vehiculo con los atributos matricula (String) y numeroDeRuedas (int), constructor,    métodos getters y setters y método toString() para mostrar la información de un vehículo.

d) Escribe el código de una clase Taxi que herede de vehículo y que además de los atributos de Vehiculo lleve un atributo adicional nombreDelConductor (String) y numeroDePlazas (int), constructor, métodos getters y setters y método toString()
   para mostrar la información de un Taxi.

e) Escribe el código de una clase test con el método main que cree un objeto cuyo tipo es Vehiculo, instanciado como Taxi.

   Establece valores para sus atributos y usa el método toString().

   ¿Qué método toString() resulta de aplicación, el propio de la clase Vehiculo o el propio de la clase Taxi?

    El de la clase 'Taxi'.
     
   ¿Por qué? Porque en tiempo de ejecución la máquina virtual de java chequea los tipos dinámicos, en este caso, una nueva instancia de un tipo 'Taxi' y cuyos constructores son los que busca para crear el objeto y sus métodos serán los que se puedan ejecutar. Si encuentra diferencia en número o tipo de los parámetros de los constructores de Taxi, dará error, como documento en mi código.


Clase Vehiculo

Código: [Seleccionar]
package aprenderaprogramar.java.iniciacion.clase90;

public class Vehiculo {
private String matricula;
private int numeroDeRuedas;
// Constructores
Vehiculo(){
matricula = "";
numeroDeRuedas= 4;
}
Vehiculo(String matricula, int numeroDeRuedas){
this.matricula = matricula;
this.numeroDeRuedas= numeroDeRuedas;
}
// Métodos
public String getMatricula() {
return matricula;
}
public void setMatricula(String matricula) {
this.matricula = matricula;
}
public int getNumeroDeRuedas() {
return numeroDeRuedas;
}
public void setNumeroDeRuedas(int numeroDeRuedas) {
this.numeroDeRuedas = numeroDeRuedas;
}
public String toString(){
String cadena = "Este Objeto es de Tipo Vehículo. Su Matrícula es '"+getMatricula()+"' y tiene '"+getNumeroDeRuedas()+"' ruedas.";
return cadena;
}
} // end class


Clase Taxi

Código: [Seleccionar]
package aprenderaprogramar.java.iniciacion.clase90;

public class Taxi extends Vehiculo{
private String nombreDelConductor;
private int numeroDePlazas;

// Constructors
Taxi(){
super();
nombreDelConductor ="";
numeroDePlazas = 0;
}
Taxi(String matricula, int numeroDeRuedas,String nombreDelConductor, int numeroDePlazas){
super(matricula, numeroDeRuedas);
this.nombreDelConductor = nombreDelConductor;
this.numeroDePlazas = numeroDePlazas;
}

// Methods
public String getNombreDelConductor() {
return nombreDelConductor;
}
public void setNombreDelConductor(String nombreDelConductor) {
this.nombreDelConductor = nombreDelConductor;
}
public int getNumeroDePlazas() {
return numeroDePlazas;
}
public void setNumeroDePlazas(int numeroDePlazas) {
this.numeroDePlazas = numeroDePlazas;
}
public String toString(){
String cadena = "Este es un Objeto Taxi, subclase de Vehículo. Su matrícula es '"+getMatricula()+"',tiene '"+getNumeroDeRuedas()+"' ruedas,\nel nombre de su conductor es '"+getNombreDelConductor()+"' y su capacidad de pasajeros es de '"+getNumeroDePlazas()+"' plazas.";
return cadena;
}
}// end class


Clase Test

Código: [Seleccionar]
package aprenderaprogramar.java.iniciacion.clase90;

public class Test {

public static void main(String[] args) {
Vehiculo mivehiculo = new Taxi("0000-ÑLK",4,"pepe",5 );
System.out.println(mivehiculo);

//Taxi mitaxi = new Vehiculo();
// Muestra Error de compilacion : Type mismatch: cannot convert from Vehiculo to Taxi , y no permite continuar.
//Taxi mitaxi = (Taxi) new Vehiculo("1111-ASD",4,"paco",5); -> da error de compilación por no existir un constructor
// de Vehiculo con 4 parámetros, a pesar de haber hecho un cast a Taxi.
Taxi mitaxi = (Taxi) new Vehiculo("1111-ASD",4);
System.out.println(mitaxi);//-> No da error de compilación pero si de ejecución :
//Exception in thread "main" java.lang.ClassCastException: aprenderaprogramar.java.iniciacion.clase90.Vehiculo
//cannot be cast to aprenderaprogramar.java.iniciacion.clase90.Taxi
//at aprenderaprogramar.java.iniciacion.clase90.Test.main(Test.java:13)

} // end main method
}// end class

Agradeceré sus correcciones o sugerencias.
« Última modificación: 08 de Diciembre 2016, 21:12 por Alex Rodríguez »

ESOJ

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 143
    • Ver Perfil
Re:Aprender java desde cero,Sobreescribir métodos en Java,ejercicio CU00690B
« Respuesta #1 en: 02 de Diciembre 2016, 03:37 »
Buenos días.
Puedes ver la explicación y un modelo de solución en - > https://www.aprenderaprogramar.com/foros/index.php?topic=1147.0

Un saludo.

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola camoay conforme te ha indicado ESOJ puedes ver un ejemplo de respuestas en el hilo citado.

Ahí la respuesta a la cuestión a) es distinta a la que tú has dado.

Haz pruebas y a partir de ellas intenta confirmar si estás de acuerdo con que la respuesta al apartado a) es sí, o si por el contrario consideras que la respuesta es no y por qué.

Saludos

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".