making tile use abstract methods rather than interfaces