Fundamentally, animation is the changing of a set of properties over time.
Animating a health bar rectangle is just changing the width of the rectangle (or maybe the height) over time, whereas animating an on-screen 2D character is basically changing the image used for its sprite as well as its position over time.
It's certainly possible to generalize an animation class as a container of transformations of properties (sometimes called keyframes) that are applied at some time offset. Complete generalization -- the ability to animate any property on any kind of target object -- may be overkill for your needs. WPF has an animation component, and CoreAnimation is also something you may be interested in looking at -- although they are both so generalized that they can be cumbersome, so be wary.
I would encourage you to arrive at a design that does not have one class per overall animation type, if possible. At least trend towards having as few as possible and sharing code. The best thing for you to do is probably figure out which kinds of animations you want to support in your code, and what actually has to change on your objects to make those animations happen, and then build a system that can cleanly change those types of properties over time. That will serve as a decent baseline.