Hola Luis Fdo Carvajal
Por favor, si creas temas en el foro, ponle un título adecuado siguiendo las indicaciones que se dan en
https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0El enunciado pedía generar 10000 objetos de tipo Cuadrupedo
Con el bucle for(int i=0;i<10001;i++) estás generando 10001 objetos. Debes tener claro el manejo de bucles e índices. El índice 0 constituye el primer elemento. Luego has definido ir del 1 al 10000. Total tienes 1 + 10000 = 10001 objetos, que no es exactamente lo que pedía el ejercicio.
Una ejecución de tu código da por ejemplo
CUADRUPEDO -->: ID0 Tipo: Gato
CUADRUPEDO -->: ID1000 Tipo: Perro
CUADRUPEDO -->: ID2000 Tipo: Elefante
CUADRUPEDO -->: ID3000 Tipo: Leon
CUADRUPEDO -->: ID4000 Tipo: Elefante
CUADRUPEDO -->: ID5000 Tipo: Gato
CUADRUPEDO -->: ID6000 Tipo: Leon
CUADRUPEDO -->: ID7000 Tipo: Gato
CUADRUPEDO -->: ID8000 Tipo: Elefante
CUADRUPEDO -->: ID9000 Tipo: Elefante
CUADRUPEDO -->: ID10000 Tipo: Leon
Hay 2568 Leones,2497 Gatos,2454 Perros y 2482 Elefantes
Sumamos
2568
2497
2454
2482
--------------
10001
La expresión r.nextInt((0)+4) no parece adecuada, ya que r.nextInt(4) es lo mismo pero más claro.
Lo demás todo bien
Saludos