En primer lugar, gracias a Álex Rodríguez por aclararme la duda anterior.
Ahora me surge otra, con el ejercicio de referencia. El caso es que, efectivamente, en respuesta a la pregunta e), el método toString() que se aplica en la ejecución es el de la subclase, porque se corresponde con el tipo dinámico Taxi.
Sin embargo, yo he decidido que el constructor de Taxi tenga 4 parámetros, los dos de la superclase Vehículo referenciados con super (matrícula y número ruedas) y otros dos correspondientes a los atributos específicos de su clase (nombre conductor y número de plazas).
En la clase test, cuando creo un objeto de la clase Vehiculo instanciado como Taxi (o incluso un objeto de la clase Taxi directamente), e invoco al constructor de Taxi, meto lógicamente los 4 parámetros de su constructor, pero al ejecutar, los valores aparecen con 0 en tipo int y con null en String. En un principio he pensado que era por el hecho de que un objeto de tipo estático Vehiculo no podía contener a un objeto instanciado como Taxi en ejecución, pero si asigno el tipo estático Taxi me pasa lo mismo. ¿Por qué?
Adjunto mi código por si es de ayuda:
public class Vehiculo{
private String matricula;
private int numRuedas;
public Vehiculo(String pMatricula, int pNumRuedas){
matricula = pMatricula;
numRuedas = pNumRuedas;
}
public void setMatricula(String pMatricula){
matricula = pMatricula;}
public void setNumRuedas(int pNumRuedas){
numRuedas = pNumRuedas;}
public String getMatricula(){
return matricula;}
public int getNumRuedas(){
return numRuedas;}
public String toString(){
return ("El vehículo tiene la matrícula " + matricula + " y tiene " + numRuedas + " ruedas");}
}
public class Taxi extends Vehiculo{
private String matricula;
private int numRuedas;
private String nombreConductor;
private int numPlazas;
public Taxi(String matricula, int numRuedas, String pNombreConductor, int pNumPlazas){
super(matricula, numRuedas);
pNombreConductor = nombreConductor;
pNumPlazas = numPlazas;
}
public void setMatricula(String pMatricula){
matricula = pMatricula;}
public void setNumRuedas(int pNumRuedas){
numRuedas = pNumRuedas;}
public void setNombreConductor(String pNombreConductor){
nombreConductor = pNombreConductor;}
public void setNumPlazas(int pNumPlazas){
numPlazas = pNumPlazas;}
public String getMatricula(){
return matricula;}
public int getNumRuedas(){
return numRuedas;}
public String getNombreConductor(){
return nombreConductor;}
public int getNumPlazas(){
return numPlazas;}
public String toString(){
return ("El taxi tiene la matrícula " + matricula + ", tiene " + numRuedas + " ruedas, su conductor se llama " + nombreConductor + ", y tiene " + numPlazas + " plazas.");}
}
public class TestInstanciaTaxi{
public static void main (String[] args){
Taxi miVehiculo = new Taxi("9999ZZZ", 4, "Pedro Pérez Pérez", 5);
System.out.println(miVehiculo.toString());
}
}