What exactly is "MovableObject target" variable? Is it a tile, or another moving character? Also, I think you should replace everything to this:
public class MovableObject extends GameObject
{
public void collisionRespone(MovableObject target)
{
if(isColliding(target))
{
float centerX = currX + width / 2;
float centerY = currY + height / 2;
double overX = ((target.width + width ) / 2.0) - Math.abs(target.currX - centerX);
double overY = ((target.height + height) / 2.0) - Math.abs(target.currY - centerY);
if(overY > overX)
{
if(this.currX > centerX){
this.velocity.x = 0;
this.currX += overX;
}
else
this.velocity.x = 0;
this.currX -= overX;
}
else
{
float vy = this.currY - this.getPrevY(); //vy is a positive value if we are falling.
if(vy > 0){
this.velocity.y = 0;
this.currY -= overY;
}
else{
this.velocity.y = 0;
this.currY += overY;
}
}
}
}
}
I should tell you, that the object which you are passing to this function should be static, like ground tile, not movable object, at least just for now, to check if everything is working all right.
Secondly, I didn't know that it was a platformer, so now I fixed the code above, that when you colliding the with ground, we set velocity.y to zero, because whats the point of moving the object back, it if the velocity will keep getting bigger, and bigger until it's velocity is so huge, that it passes your obstacle in one frame, and can't check if it is collided or not.
You should put a vector in your GameObject class representing velocity, because as of now I see you don't have one. And each frame you will add that velocity to your players position like this:
currX += velocity.x;
currY += velocity.y;