Hola.
El error está en el constructor de la clase
TaxiEn la clase
TaxiCond estás inicializando un objeto Taxi con un constructor
sin parametros: public TaxiCond () {
vehiculoTaxi = new Taxi(); //Creamos un objeto Taxi con el constructor general de Taxi
conductorTaxi = new Persona (); //Creamos un objeto Persona con el constructor general de Persona
}
Pero resulta la clase
Taxi solo tiene un constructor definido, y está definido
con parametros: public Taxi (String valorCiudad, String valorMatricula, String valorDistrito, int valorTipoMotor) {
ciudad = "";
matricula = "";
distrito = "";
tipoMotor = 0;
}
Que por cierto, este constructor de
Taxi no tiene ningún sentido, ya que pide parámetros pero luego dentro del constructor no los está usando. Inicializa los atributos con valores 0 y cadenas vacías, tal y como haríamos en un constructor
sin parametrosPar corregir el error, hay que modificar el constructor para que no pida parametros, total no los está usando.
O ya puestos podemos definir dos constructores para
Taxi, uno
sin parametros y otro
con parametros, aunque este último no se va a utilizar, al menos no en este ejercicio..
Obviamente el que pide parametros, luego ha de usarlos convenientemente para la inicialización de los atributos:
//Constructor SIN parametros
public Taxi() {
ciudad = "";
matricula = "";
distrito = "";
tipoMotor = 0;
}
//Constructor CON parametros
public Taxi (String valorCiudad, String valorMatricula, String valorDistrito, int valorTipoMotor) {
ciudad = valorCiudad;
matricula = valorMatricula;
distrito = valorDistrito;
tipoMotor = valorTipoMotor;
}
Con esto ya desaparece el error y puedes compilar bien.
Confirmanos que has entendido bién a que se debe el error, si no te queda claro intentamos explicarlo de otra forma.
No se si en este punto del curso de Java, se ha visto ya por qué un constructor pide parametros y cómo se inicializa un objeto con parametros.
Por si acaso, lo intento explicar de forma muy resumida.
Al inicializar un objeto, podemos elegir si queremos hacerlo pasandole o no parametros.
Si no le pasamos parametros, tendremos un objeto creado pero seguramente sus atributos no tendrán ningún valor asignado. Así que posteriormente tendremos que usar los "setters" para establecer el valor de esos atributos.
Por ejemplo:
Persona persona1 = new Persona();
persona1.setNombre("Kabuto");
persona1.setGenero("Hombre");
persona1.setEdad(38);
Ahora bien, podemos hacer eso mismo en una sola linea, usando un constructor al que le podamos pasar parametros.
Persona persona1 = new Persona("Kabuto", "Hombre", 38);
Por esto es común que las clases tengan al menos dos constructores, uno sin parametros y otro con parametros.
Si ya tenemos los datos de los atributos, por ejemplo porque los estamos leyendo de una base de datos o de un fichero de texto, preferiremos utilizar el constructor
con atributos.
Si todavía no tenemos los datos de los atributos, porque tenemos que pedirle al usuario que los introduzca por teclado, seguramente preferiremos utilizar el constructor
sin parametros. Luego, tras crear el objeto, pediremos datos por teclado al usuario y los iremos asignando a los atr
iobutos mediante los "setters"
Como ves, elegir uno u otro dependerá de las necesidades de nuestro programa.