Autor Tema: Qué es la ligadura dinámica Java tipo estático y dinámico Ejercicio CU00690B  (Leído 6414 veces)

fedegaray

  • Principiante
  • **
  • Mensajes: 81
    • Ver Perfil
Hola hola hola. Me hago presente para dar respuesta al cuestionario de la lección 90.

Citar
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?

Sí que puede.

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

También es posible, pero con el costo de perder cierta información que contenía el subtipo.

Citar
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]
public class Vehiculo {
    private String matricula;
    private int numeroDeRuedas;
   
    public Vehiculo () {
        matricula = "";
        numeroDeRuedas = 0;
    }
   
    public Vehiculo (String valorMatricula, int valorNumeroDeRuedas) {
        matricula = valorMatricula;
        numeroDeRuedas = valorNumeroDeRuedas;
    }
   
    public void setMatricula (String valorMatricula) {
        matricula = valorMatricula;
    }
   
    public void setNumeroDeRuedas (int valorNumeroDeRuedas) {
        numeroDeRuedas = valorNumeroDeRuedas;
    }
   
    public String getMatricula () {
        return matricula;
    }
   
    public int getNumeroDeRuedas () {
        return numeroDeRuedas;
    }
   
    public String toString () {
        String info  = "La matrícula del vehículo es: " + getMatricula() + "\nEl vehículo tiene " + getNumeroDeRuedas() + " ruedas";
        return info;
    }
}

Citar
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]
public class Taxi extends Vehiculo {
    String nombreDelConductor;
    int numeroDePlazas;
   
    public Taxi () {
        super ();
        nombreDelConductor = "";
        numeroDePlazas = 0;
    }
   
    public Taxi (String valorMatricula, int valorNumeroDeRuedas, String valorNombreDelConductor, int valorNumeroDePlazas) {
        super (valorMatricula, valorNumeroDeRuedas);
        nombreDelConductor = valorNombreDelConductor;
        numeroDePlazas = valorNumeroDePlazas;
    }
   
    public void setNombreDelConductor (String valorNombreDelConductor) {
        nombreDelConductor = valorNombreDelConductor;
    }
   
    public void setNumeroDePlazas (int valorNumeroDePlazas) {
        numeroDePlazas = valorNumeroDePlazas;
    }
   
    public String getNombreDelConductor () {
        return nombreDelConductor;
    }
   
    public int getNumeroDePlazas () {
        return numeroDePlazas;
    }
   
    public String toString () {
        super.toString();
        String mensaje = "El nombre del conductor es " + getNombreDelConductor() + " y el taxi posee " + getNumeroDePlazas() + " plazas";
        return mensaje;
    }
}

Citar
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]
public class TestVehiculo {
    public static void main (String [] args) {
        Vehiculo taxi1 = new Taxi ("FG55685", 4, "Tito", 5);
        System.out.println (taxi1.toString());
    }
}

El método toString() que resultó de la aplicación es el propio de la clase Taxi, ya que durante la ejecución el sistema busca el método primeramente en la subclase, y sólo si no lo encuentra allí acudirá a la clase padre. En este ejemplo, sí pudo encontrarla en la subclase.
« Última modificación: 01 de Mayo 2015, 09:07 por Alex Rodríguez »

Dan_SB

  • Avanzado
  • ****
  • Mensajes: 273
  • *<DanielsCK>*
    • Ver Perfil
Hola de nuevo fedegaray

La primera pregunta. Correcta, con un casting podemos lograrlo:

Vehiculo carro1 = new Vehiculo();
Taxi taxi1 = new Taxi();

Casting : taxi1 = (Taxi) carro1;

La segunda pregunta también esta bien... en cuanto la tercera pregunta, lee este parrafo:
Citar
en tiempo de ejecución Java está constantemente “buscando” (“ligando” o “despachando”) el método que corresponda en función del tipo dinámico al que apunta una variable. Si el método invocado no se encuentra definido en el tipo dinámico de que se trate, Java busca el método en la superclase para tratar de ejecutarlo.

Yo me estuve preguntando en esa pregunta que pasa, como es, y esto fue lo que capte:

primero buscara en Taxi, si no encuentra dicho metodo en Taxi, prosigue buscando en las superclases subclases... y así sucesivamente...

Espero haberte ayudado en algo! saludos!
« Última modificación: 01 de Mayo 2015, 09:05 por Alex Rodríguez »
"Luchar por tus sueños y cumplirlos... eso es vivir.."

fedegaray

  • Principiante
  • **
  • Mensajes: 81
    • Ver Perfil
Claro que me has ayudado! Un gran abrazo!

 

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