Hola a todos !! Paso a dejar las respuestas y el código del ejercicio propuesto CU00690B del curso básico de programación en Java desde cero. Desde ya muchas gracias. Saludos Luis
EJERCICIO
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. Salvo que usemos "enmascaramiento de tipos" explicado en la clase anterior. Ejemplo:
Vehiculo v1 = new Vehiculo()
Taxi t1 = new Taxi()
t1=(Taxi)v1
Para verificar si podemos hacerlo debemos usar instanceof en una consulta. En el ejemplo que pongo a continuación no marca error en el compilado pero si en la ejecución.
b) ¿Un objeto de tipo estático declarado Vehiculo puede contener a un objeto Taxi en tiempo de ejecución?
SI. al ser Vehiculo una superclase de Taxi lo puede contener.
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.
/**
* Write a description of class Vehiculo here.
*
* @author Luis
* @version CU00690B
*/
public class Vehiculo
{
// instance variables - replace the example below with your own
private String matricula;
private int numeroDeRuedas;
public Vehiculo(String matricula, int numeroDeRuedas)
{
this.matricula=matricula;
this.numeroDeRuedas=numeroDeRuedas;
}
/**
* Constructor for objects of class Vehiculo
*/
public Vehiculo()
{
// initialise instance variables
matricula = "";
numeroDeRuedas = 0;
}
/**
* @param matricula Matricula del vehiculo
*/
public void setMatricula(String matricula) {
this.matricula = matricula;
}
/**
* @param numeroDeRuedas Cantidad de ruedas
*/
public void setNumeroDeRuedas(int numeroDeRuedas) {
this.numeroDeRuedas = numeroDeRuedas;
}
/**
* @return la matricula del vehiculo
*/
public String getMatricula() {return matricula;}
/**
* @return el numero de ruedas
*/
public int getNumeroDeRuedas() {return numeroDeRuedas;}
public String toString(){
String mensaje="el vehiculo es :"+matricula+" y la cantidad de ruedas es :"+numeroDeRuedas;
return mensaje;
}
}
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.
/**
* Write a description of class Taxi here.
*
* @author Luis
* @version CU00690B
*/
public class Taxi extends Vehiculo
{
// instance variables - replace the example below with your own
private String nombreDelConductor;
private int numeroDePlazas;
/**
* Constructor for objects of class Taxi
*/
public Taxi()
{
nombreDelConductor = "";
numeroDePlazas = 0;
}
public Taxi(String matricula, int cantidadDeRuedas, String nombreDelConductor,int numeroDePlazas)
{
super(matricula, cantidadDeRuedas);
this.nombreDelConductor=nombreDelConductor;
this.numeroDePlazas=numeroDePlazas;
}
/**
* @param nombreDelConductor Nombre del chofer
*/
public void setNombreDelConductor(String nombreDelConductor) {
this.nombreDelConductor = nombreDelConductor;
}
/**
* @param numeroDePlazas numero de plazas
*/
public void setNumeroDePlazas(int numeroDePlazas) {
this.numeroDePlazas = numeroDePlazas;
}
/**
* @return el nombre del chofer
*/
public String getNombreDelConductor() {return nombreDelConductor;}
/**
* @return el numero de plazas
*/
public int getNumeroDePlazas() {return numeroDePlazas;}
public String toString(){
String mensaje="es manejado por :"+nombreDelConductor+" y el numero de plazas es :"+numeroDePlazas;
return mensaje;
}
}
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? ¿Por qué?
/**
* Write a description of class Test here.
*
* @author Luis
* @version CU00690B
*/
public class Test
{
public static void main (String [ ] Args) {
// declaramos la valirable o puntero del tipo Vehiculo - TIPO ESTATICO
Vehiculo taxi;
// creamos el objeto - TIPO DINAMICO
taxi = new Taxi("ASD 1234",4,"JUAN PEREZ",3);
System.out.println(taxi.toString());
}
}
El resultado de la ejecucion es :
es manejado por :JUAN PEREZ y el numero de plazas es :3
En este ejercicio dividí la declaración de la variable con la construcción del objeto.
El tipo ESTATICO es Vehiculo (lo que controla el compilador)
Vehiculo taxi;
O sea, podemos usar los metodos getters y setters de la clase Vehiculo, pero al asignarle en forma DINAMICA Taxi en la construcción:
taxi = new Taxi("ASD 1234",4,"JUAN PEREZ",3);
vamos a poder usar aquellos métodos que se llamen en forma igual, como por ejemplo toString(). Al invocar ese método no devuelve el de la clase Taxi y a eso se le llama sobreescribir métodos.