Ejercicio CU00690B del taller de fundamentos de programación orientada a objetos con Java y BlueJ
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?
Rta: El objeto Vehiculo es de la superclase y el objeto Taxi es de una subclase, durante la ejecución la máquina virtual Java es capaz de identificar el tipo dinámico de las variables que apuntan a objetos y asignar un método u otro en función de ese tipo dinámico.
b) 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) 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.
d) 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é?
Rta: Cualquiera de los dos, por que el método toString nos permite mostrar la información completa de un objeto, es decir, el valor de sus atributos.
package vehiculo;
import java.util.ArrayList;
import java.util.Scanner;
/**
*
* @author ITCO1724
*/
public class Taxi extends Vehiculo {
//Se crea un ArrayList para guardar objetos de tipo Taxi.
static ArrayList<Taxi> taxi = new ArrayList<Taxi>();
static Scanner sc = new Scanner(System.in);
//método main
public static void main(String[] args) {
leerTaxi();
System.out.println("\nTaxis introducidos:");
mostrarTaxis();
} //fin método main
//Método para leer taxis e introducirlos en el array
public static void leerTaxi(){
//Declaración de variables para leer los datos de los coches
String matricula;
String nombreDelConductor;
int numeroDePlazas;
int numeroDeRuedas;
Taxi aux; //Variable auxiliar que contendrá la referencia a cada nuevo taxi introducido.
int i, N ;
//se pide por teclado el número de coches a leer
do {
System.out.print("Número de Taxis? ");
N = sc.nextInt();
} while (N < 0);
sc.nextLine(); //limpiar el intro
//lectura de N Taxis
for (i = 1; i <= N; i++) {
//leer datos de cada Taxi
System.out.println("Taxi " + i);
System.out.print("Matrícula: ");
matricula = sc.nextLine();
System.out.print("NombreDelConductor: ");
nombreDelConductor = sc.nextLine();
System.out.print("numero de asientos: ");
numeroDePlazas = sc.nextInt();
System.out.print("Número de Ruedas: ");
numeroDeRuedas = sc.nextInt();
sc.nextLine(); //limpiar el intro
aux = new Taxi(); //Se crea un objeto Taxi y se asigna su referencia a aux
//se asignan valores a los atributos del nuevo objeto
aux.setMatricula(matricula);
aux.setnombreDelConductor(nombreDelConductor);
aux.setnumeroDePlazas(numeroDePlazas);
aux.setnumeroDeRuedas(numeroDeRuedas);
//se añade el objeto al final del array
taxi.add(aux);}
} //fin método leerTaxis()
//Método para mostrar todos los Taxis
public static void mostrarTaxis(){
for(int i = 0; i< taxi.size(); i++)
System.out.println(taxi.get(i)); //se invoca el método toString de la clase Taxi
}
} //fin de la clase principal
package vehiculo;
/**
*
* @author ITCO1724
*/
public class Vehiculo {
private String matricula;
private int numeroDeRuedas;
private String nombreDelConductor;
private int numeroDePlazas;
//Métodos
public String getMatricula() { return matricula; }
public void setMatricula(String matricula) { this.matricula = matricula; }
public int getnumeroDeRuedas () { return numeroDeRuedas; } //Método función para retornar el numero de ruedas
public void setnumeroDeRuedas (int numeroDeRuedas) { this. numeroDeRuedas = numeroDeRuedas; } //Método procedimiento para fijar el numeroDeRuedas
public int getnumeroDePlazas (){return numeroDePlazas;}
public void setnumeroDePlazas (int numeroDePlazas) { this. numeroDePlazas = numeroDePlazas; }
public String getnombreDelConductor() { return nombreDelConductor; }
public void setnombreDelConductor(String nombreDelConductor) { this.nombreDelConductor = nombreDelConductor; }
public String toString() { StringBuilder sb = new StringBuilder();
sb.append("\nMatrícula: ");
sb.append(matricula);
sb.append("\nnumeroDeRuedas: ");
sb.append(numeroDeRuedas);
sb.append("\nNombreDelConductor: ");
sb.append(nombreDelConductor);
sb.append("\nnumero de asientos: ");
sb.append(numeroDePlazas);
return sb.toString();
}
}