I'm guessing that your code may be checking if the y coordinate of the bird is exactly equal to a value instead of <= or >=.
For example, when the cardinal is moving up, if the y-coordinate is < Flyable.STEP_SIZE (ie. 5) then another step would put the cardinal out of window at the top and isMovingUp should be set to false. If instead you were checking exactly for a y coordinate of 0 before turning around and the y coordinate of the cardinal is 3, then subtracting 5 would be less than 0 (but not 0), so the y coordinate should throw an exception when you try to use the setPosition method with a y value of -2.
The same can happen at the bottom of the window, checking exactly for Aviary.WINDOW_SIZE or really Aviary.WINDOW_SIZE - Flyable.FLYER_SIZE