I don't get what you are asking for exactly, but I am asuming that you need to animate a Sprite.
From what I understand from your post, you seem to be the kind of programmer that has found OOP and thinks it is the best and most elegant solution for everything.
You don't need all those classes to animate a sprite. You just need an array that holds all the animation frames, and you loop over it once per main loop tick, changing the sprite's image with the one that the array index reaches. At the end of the animation just have an image that shows the sprite being idle.
for example, have only a Sprite class like this (pseudocode - also encompasses an animation function that goes over the frames in an array once per loop tick):
class Sprite:
constructor::set(x,y,image,moving,frames,currentFrame,extraTime) // give it some attributes
assign_attributes
{
x = 100
y = 100
image = image1
moving = False //this is a boolean that changes state when a movement key is pressed
frames = [image1,image2,image3,image4] // array of animation frames, taken from a spritesheet
currentFrame = 0
extraTime = 0
}
function AnimateSprite(int secondsPast)
{
if moving == true
{
extraTime += secondsPast
timeBetweenFrames = 1.0/30.0
while (extraTime > timeBetweenFrames)
{
extraTime -= timeBetweenFrames
currentFrame+=1
if currentFrame > maxNumberOfFrames:
currentFrame = 0
}
image = frames[currentFrame]
}
else
image = image1
}