Variabili/parametri possono benissimo essere di un tipo astratto (interfaccia o classe abstract). Non è quello il problema. Chiaramente ad una variabile/parametro di tipo Animali (nota: dovrebbe chiamarsi Animale) che è abstract potrai e dovrai assegnare oggetti di sotto-classi "concrete".
P.S.: Che senso ha, proprio concettualmente, assegnare un Gatto ad un Mammifero??
P.S.2: il gatto è un mammifero. Quindi avrebbe più senso Gatto extends Mammifero.![]()