Hola a todos, aquí les dejo las respuestas y el código de mi ejercicio:
Enunciado y Respuestas:
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
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
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
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.