Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: david82 en 04 de Agosto 2017, 01:38

Título: Sobreescritura métodos Java diferencia entre tipo estático y dinámico CU00690B
Publicado por: david82 en 04 de Agosto 2017, 01:38
Hola. Mis soluciones propuestas al ejercicio CU00690B del tutorial de programación Java con BlueJ son las siguientes:

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

Rta: Sí. Se podría hacer un casting pero causaría un código complejo de mantener si no se tiene control del mismo con instanceof.

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

Rta: Sí. Debido a que Vehículo es superclase de Taxi.

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 Vehiculo2 {
private String matricula;
private int numeroDeRuedas;

public Vehiculo2() {
matricula = null;
numeroDeRuedas=4;
}

public String getMatricula(){return matricula;}
public int getNumeroDeRuedas(){return numeroDeRuedas;}
public void setMatricula(String unaMatricula){matricula = unaMatricula;}
public void setNumeroDeRuedas(int numeroDeRuedas){this.numeroDeRuedas = numeroDeRuedas;}

public String toString(){return matricula+" "+numeroDeRuedas;}

}

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 Vehiculo2{
private String nombreDelConductor;
private int numeroDePlazas;

public Taxi(){
super();
nombreDelConductor = null;
numeroDePlazas = 1;
}

public String getnombreDelConductor(){return nombreDelConductor;}
public int getNumeroDePlazas(){return numeroDePlazas;}
public void setNumeroDelConductor(String nombreDelConductor){this.nombreDelConductor=nombreDelConductor;}
public void setNumeroDePlazas(int numeroDePlazas){this.numeroDePlazas=numeroDePlazas;}
public String toString(){return nombreDelConductor+" "+numeroDePlazas;}

}

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 TestVehiculo2 {

public static void main(String[] args) {
Vehiculo2 v1 = new Taxi();

v1.setMatricula("NKG-345");
v1.setNumeroDeRuedas(6);

System.out.println(v1.toString());
}
}

El método aplicado es el toString() de la clase Taxi(), debido a que cambia dinámicamente en tiempo de compilacion y el compilador de java considera a v1 como un tipo estático de Taxi, por lo tanto se ejecuta su propio método normalmente.
Título: Re:Sobreescritura métodos Java diferencia entre tipo estático y dinámico CU00690B
Publicado por: Alex Rodríguez en 22 de Agosto 2017, 19:53
Hola david82, respuestas correctas. En este hilo hay algunos comentarios de interés: https://www.aprenderaprogramar.com/foros/index.php?topic=1147.0

Saludos