I think that for this situation you can just represent your maze as a matrix of boolean values. The boolean values can be used to indicate whether there is a wall for that position.

Here's an example (with true indicating that the right side doesn't have a wall):

      __ __ __ __ 
     |__   |__   |           [[true,  false, true,  false]
     |  |  |     |            [false, false, true,  false],
     |  |   __|  |      =>    [false, true,  false, false],
     |     |   __|            [true,  false, true,  false],
     |__|__|__ __|            [false, false, true,  false]]  

The top, bottom, and left sides implicitly have a wall.   

Using this representation, you should be able to calculate your end point in a time proportional to the distance between an end and start point.  

Your walls likely don't have to be their own class for this problem. If you ever want to extend your program such that landing on specific types of walls (say a fire wall) results in different behavior, then objects may be helpful.   

Even in that case, I would say that using an `enum` may be sufficient.