Cita: La duda que tengo es como pongo en el constructor el atributo "arrayList<Cliente> listaClientes". o si si es necesario ponerlo o si lo pongo en otro constructor o como lo pongo?.
Es un poco raro como mezclas reserva y habitación.
Cita: y si al "arrayList<Cliente> listaClientes" se le puede hacer get y set.
Es un objeto ¿por qué no se iba a poder?
Cita: entonces la duda que tengo también es como llamar a ese arrayList y utilizarlo para agregar los datos.
Lo recuperas con el get, se comporta como cualquier List.
Cita: lo que no entiendo muy bien en esta caso es si el ArrayList<Cliente> listaClientes sirve para que me liste los clientes que están en la clase clientes o para que otra cosa podría servir?
Si tú tienes un listado de clientes dentro de un objeto, lo lógico es que sean los clientes de esa reserva/habitación, no todos los clientes.
¿Para qué podría servir? Eso es cosa tuya, tú sabrás las necesidades de tu aplicación. Las clases no se crean y después se busca para qué sirven, se ven las necesidades y se crean en función de ellas.
Edito: No entiendo por qué reserva hereda de habitación, una reserva no es una habitación.