Hola, buenas tardes,
Aquí dejo mi ejercicio del tema "CU00690B sobreescritura metodos java estatico dinamico ligadura compilador" para su corrección, que he de reconocer que me ha vuelto un poco loco (no se si lo he cogido todo).
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?
Si. Haciendo un enmascaramiento o "casting".
b) ¿Un objeto de tipo estático declarado Vehiculo puede contener a un objeto Taxi en tiempo de ejecución?
Si. Es la base de la Herencia ¿No?.
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.
package ejercicio_CU00690B;
/**
* EJERCICIO DE HERENCIAS Y MÉTODOS POLIMÓRFICOS.<br>
* Esta Clase define una Superclase de la que "beberan" otras clases.<br>
* Clase 1 del Ejercicio del Tema "CU00690B sobreescritura metodos java estatico dinamico ligadura compilador".
* @author Lorenzo Fernández Asensio
* @version 20151127.01
*/
public class Vehiculo_CU00690B {
// Inicialización de Atributos
private String matricula;
private int numDeRuedas;
/**
* Constructor 1 del Producto. Atribututos sin asignación de Valores
* @param matricula El parámetro matricula define la Matricula de Vehiculo
* @param numDeRuedas El parámetro numDeRuedas define el número de ruedas que tiene el Vehiculo
*/
public Vehiculo_CU00690B() {
matricula = "";
numDeRuedas = 0;
} // Cierre del Constructor 1
/**
* Constructor 2 del Producto. Atribututos con asignación de Valores
* @param matricula El parámetro matricula define la Matricula de Vehiculo
* @param numDeRuedas El parámetro numDeRuedas define el número de ruedas que tiene el Vehiculo
*/
public Vehiculo_CU00690B(String matricula, int numDeRuedas) {
this.matricula = matricula;
this.numDeRuedas = numDeRuedas;
} // Cierre del Constructor 2
/**
* Método para establecer la Matricula de Vehiculo
* @param valorMatricula El parámetro valorMatricula define el valor que contendrá la Matricula
*/
public void setMatricula(String valorMatricula) {
matricula = valorMatricula;
} // Cierre del método para establecer la Matricula de Vehiculo
/**
* Método para establecer el Número de Ruedas del Vehiculo
* @param valorNumDeRuedas El parámetro valorNumDeRuedas define el valor que contendrá el Número de Ruedas
*/
public void setNumDeRuedas(int valorNumDeRuedas) {
numDeRuedas = valorNumDeRuedas;
} // Cierre del método para establecer el Número de Ruedas del Vehiculo
/**
* Método para para obtener la Matricula de Vehiculo
* @return La Matricula de Vehiculo
*/
public String getMatricula(){ return matricula; }
/**
* Método para para obtener el Número de Ruedas del Vehiculo
* @return El Número de de Ruedas del Vehiculo
*/
public int getNumDeRuedas(){ return numDeRuedas; }
/**
* Método para obtener la Información del Vehiculo
*/
public String toString() {
return "Matricula: " + matricula + "\n" + "Número de ruedas: " + numDeRuedas + "\n";
} // Cierre de la clase
} // Cierre de la Clase
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.
package ejercicio_CU00690B;
/**
* EJERCICIO DEL USO DE HERECIAS Y MÉTODOS POLIMÓRFICOS.<br>
* Esta Clase define una Subclase que "bebe" de la Superclase Vehiculo_CU00690B.<br>
* Clase 2 del Ejercicio del Tema "CU00690B sobreescritura metodos java estatico dinamico ligadura compilador".
* @author Lorenzo Fernández Asensio
* @version 20151127.01
*/
public class Taxi_CU00690B extends Vehiculo_CU00690B {
// Inicialización de Atributos
private String nombreDelConductor;
private int numDePlazas;
/**
* Constructor 1 del Producto. Atribututos sin asignación de Valores
* @param nombreDelConductor El parámetro nombreDelConductor define el Nombre Del Conductor del Taxi
* @param numDePlazas El parámetro numDePlazas define el número de plazas que tiene el Taxi
*/
public Taxi_CU00690B() {
super(); // Parametros del constructor de la Superclase. Siempre se incluyen
// Parametros especificos de la Subcalse
nombreDelConductor = "";
numDePlazas = 0;
} // Cierre del Constructor 1
/**
* Constructor 2 del Producto. Atribututos con asignación de Valores
* @param nombreDelConductor El parámetro nombreDelConductor define el Nombre Del Conductor del Taxi
* @param numDePlazas El parámetro numDePlazas define el número de plazas que tiene el Taxi
*/
public Taxi_CU00690B(String matricula, int numDeRuedas, String nombreDelConductor, int numDePlazas) {
super(matricula, numDeRuedas); // Parametros del constructor de la Superclase. Siempre se incluyen
this.nombreDelConductor = nombreDelConductor;
this.numDePlazas = numDePlazas;
} // Cierre del Constructor 2
/**
* Método para establecer el Nombre Del Conductor del Taxi
* @param valorNombreDelConductor El parámetro valorNombreDelConductor define el valor que contendrá el Nombre Del Conductor del Taxi
*/
public void setNombreDelConductor(String valorNombreDelConductor) {
nombreDelConductor = valorNombreDelConductor;
} // Cierre del método para establecer la NombreDelConductor de Vehiculo
/**
* Método para establecer el Número de plazas del Taxi
* @param valorNumDePlazas El parámetro valorNumDePlazas define el valor que contendrá el Número de plazas
*/
public void setNumDePlazas(int valorNumDePlazas) {
numDePlazas = valorNumDePlazas;
} // Cierre del método para establecer el Número de plazas del Vehiculo
/**
* Método para para obtener el Nombre Del Conductor del Taxi
* @return El Nombre Del Conductor del Taxi
*/
public String getNombreDelConductor(){ return nombreDelConductor; }
/**
* Método para para obtener el Número de plazas del Taxi
* @return El Número de de Ruedas del Taxi
*/
public int getNumDePlazas(){ return numDePlazas; }
/**
* Método para obtener la Información del Taxi
*/
public String toString() {
return super.toString() + "Nombre del Conductor: " + nombreDelConductor + "\n" + "Número de Plazas: " + numDePlazas + "\n";
} // Cierre de la clase
} // Cierre de la Clase
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é?
package ejercicio_CU00690B;
/**
* EJERCICIO DEL USO DE HERECIAS Y MÉTODOS POLIMÓRFICOS.<br>
* Esta Clase define una clase test para probar Herencias y Métodos Polimórficos.<br>
* Se crea y se muestra la información de un Vehiculo instanciado como Taxi.
* Clase 10 del Ejercicio del Tema "CU00690B sobreescritura metodos java estatico dinamico ligadura compilador".
* @author Lorenzo Fernández Asensio
* @version 20151127.01
*/
public class Test_CU00690B {
public static void main (String [] args) {
String matricula = "ROK-6665";
int numDeRuedas = 4;
String nombreDelConductor = "Bautista";
int numDePlazas = 7;
// Inicialización y Creación de un objeto tipo Vehiculo instanciado como Taxi
Vehiculo_CU00690B taxiN1 = new Taxi_CU00690B(matricula,numDeRuedas,nombreDelConductor,numDePlazas);
// Se limpia la pantalla de la Consola
System.out.println("\f");
// Se muestra en Pantalla Título dee comienzo
System.out.println ("ATRIBUTOS DEL VEHICULO \"taxiN1\"");
System.out.println ("-------------------------------");
// Se muestra en Pantalla los atributos
System.out.println (taxiN1.toString());
} // Fin del main
} // Fin de la clase
Respuesta: Se ejecuta el método toString() del objeto Taxi porque, en tiempo de ejecución, el compilador busca el tipo que contiene el objeto y ejecuta sus métodos y solo si no los encuentra los busca el la clase padre.
Espero vuestras correcciones,
Muchas Gracias,
Saludos,