Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: dferna en 12 de Abril 2017, 15:38

Título: Java Resolución ejercicio sobreecribir métodos tipo estático y dinámico CU00690B
Publicado por: dferna en 12 de Abril 2017, 15:38
Hola  ;)

Expongo la resolución al ejercicio CU00690B del taller de programación Java con IDE Bluej sobre los tipos estáticos, dinámicos y la sobreescritura de métodos.

El ejercicio en primer lugar plantea 2 preguntas:

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

Un objeto de tipo estático Taxi no puede contener un objeto Vehiculo en tiempo de ejecución, porque su tipo dinámico (Vehiculo) es la superclase de Taxi.

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

Un objeto de tipo estático Vehiculo si puede contener un objeto Taxi en tiempo de ejecución, porque su tipo dinámico (Taxi) es subclase de Vehiculo.


Código fuente ejercicio:

Clase Test
Código: [Seleccionar]
package aplicacion;

import vehiculo.*;

public class Test {

public static void main(String[] args) {

Vehiculo v1 = new Taxi();


v1.setMatricula("0396FKX");
v1.setNumeroDeRuedas(4);
System.out.println(v1.toString());

}

}


Superclase Vehiculo

Código: [Seleccionar]
package vehiculo;

public class Vehiculo {

private String matricula;
private int numeroDeRuedas;

//Constructor
public Vehiculo(){

}

//Getters and Setters
public String getMatricula(){
return matricula;
}

public void setMatricula(String valorMatricula){
matricula = valorMatricula;
}

public int getNumeroRuedas(){
return numeroDeRuedas;
}

public void setNumeroDeRuedas(int valorNumeroDeRuedas){
numeroDeRuedas = valorNumeroDeRuedas;
}

public String toString(){
return "Información del vehículo: Matrícula: "+matricula+" Número de ruedas: "+numeroDeRuedas;
}
}


Subclase Taxi

Código: [Seleccionar]
package vehiculo;

public class Taxi extends Vehiculo{

private String numeroDelConductor;
private int numeroDePlazas;

//Getters and Setters
public String getNumeroDelConductor() {
return numeroDelConductor;
}
public void setNumeroDelConductor(String numeroDelConductor) {
this.numeroDelConductor = numeroDelConductor;
}
public int getNumeroDePlazas() {
return numeroDePlazas;
}
public void setNumeroDePlazas(int numeroDePlazas) {
this.numeroDePlazas = numeroDePlazas;
}

//Método toString sobreescrito
public String toString(){
return "Información del taxi: Número del conductor: "+numeroDelConductor+" Número de plazas: "+numeroDePlazas;
}
}


Ejecución del programa

Citar
Información del taxi: Número del conductor: null Número de plazas: 0

Preguntas:

Citar
¿Qué método toString() resulta de aplicación, el propio de la clase Vehiculo o el propio de la clase Taxi? ¿Por qué?

El método toString() que se ejecuta es el de la clase Taxi, esto es debido a que en tiempo de ejecución los métodos que se ejecutan dan preferencia al tipo dinámico que en este caso es Taxi.

Saludos  :)
Título: Re:Java Resolución ejercicio sobreecribir métodos tipo estático y dinámico CU00690B
Publicado por: Alex Rodríguez en 17 de Junio 2017, 14:05
Hola dferna

Para la primera pregunta la respuesta es sí, puedes ver la explicación en https://www.aprenderaprogramar.com/foros/index.php?topic=1147.0

La segunda pregunta está correcta, la respuesta es sí

El código y respuesta a la pregunta sobre el código también está correcta

Saludos