Hola manu37, efectivamente esta parte del curso es importante y conviene entenderla bien.
Una cosa a tener en cuenta es que pueden ser atributos de una clase tipos primitivos como un entero (int), un booleano (boolean), pero también pueden ser atributos objetos como un Medico, una Rueda, o un CombinadorDePalabras.
No voy a analizar todo tu código. Voy a indicar simplemente el primer error que me marca el compilador.
El error es "cannot find symbol - class Taxi".
¿Por qué se produce este error?
Cuando tú declaras un atributo como int edad; el compilador encuentra definido qué es un int en el api de Java. En cambio si declaras un atributo como Taxi vehiculoTaxi; el compilador intenta buscar una clase donde esté definido qué es un objeto Taxi, qué atributos tiene, qué métodos tiene, etc. Pero si no introduces ese código en otra clase no lo encuentra. Por tanto el primer paso que hay que dar es definir todas las clases que van a intervenir para que se encuentren todas las clases que sean necesarias.
En este caso te dice: "no puedo encontrar la clase Taxi" (estás intentando declarar un objeto Taxi como atributo, pero no está el código de la clase Taxi).
Espero sirva de ayuda.
Saludos