Autor Tema: Sobreescribir métodos en Java toString() Tipo estático y dinámico. CU00690B  (Leído 2806 veces)

LuisM

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 131
    • Ver Perfil
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.

Código: [Seleccionar]
/**
 * 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.

Código: [Seleccionar]
/**
 * 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é?

Código: [Seleccionar]
/**
 * 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.


« Última modificación: 19 de Octubre 2017, 18:07 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola LuisM, las respuestas son:

a) Sí, puedes ver una explicación en https://www.aprenderaprogramar.com/foros/index.php?topic=1147.0
b) Sí
c), d) y e) los códigos están correctos

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".