using a cast in an overriden equals method should I use generics and if so, how?
You could try something like the following in The Animal Class:

 @Override
   public boolean equals(Object obj) {
      Animal animal = null;
      if(obj == null || this ==null) {
         return false;
      }
      if(obj instanceof Animal) {
         animal = (Animal) obj;
      }
      if(this.name.equals(animal.getName())) {
         return true;
      }

      return super.equals(obj);
   }


Now if you have a Cat and a Dog which extend Animal
and you check

private Cat cat = new Cat("Pipsy");
private Dog dog = new Dog("Pupsy");


if(cat.equals(dog)) will return false because you check the name, and they have a different one.

I do not think you have to use Generics, Object is generic enough :). Hope this helped